微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我可以使用 bfs 技术在无向加权图中找到最短路径吗?而不是 dijkstra 的算法?

如何解决我可以使用 bfs 技术在无向加权图中找到最短路径吗?而不是 dijkstra 的算法?

所以,考虑下图,其中“这意味着重量”

1--'2'--2--'5'--5
|'1'    \'4'    /'1'       src=1 and destination =5
|        \     /            Therefore,output = 1+3+1=5
4--'3'-----3

所以我的问题是我可以使用 bsf 而不是 dijkstra 的,因为在我遵循的教程中说我们不能将 bsf 用于加权图,所以我们使用了 dijkstra,但是当我尝试 bsf 算法时,它工作正常。这是bsf代码

#include<bits/stdc++.h>
using namespace std;

class Solution {

    public:
        int shortestPath(int N,vector<pair<int,int>>adj[],int src,int des){
            queue<int>q;
            vector<int>dis(N+1,INT_MAX);
            q.push(src);
            dis[src]=0;
            while(!q.empty()){
                int node = q.front();
                q.pop();
                for(auto it:adj[node]){
                    if(dis[node]+it.second<dis[it.first]){
                        dis[it.first]= dis[node]+it.second;
                        q.push(it.first);
                    }
                }
            }
            return dis[des];
        }
};



int main(){
    int V,E;
    cin >> V >> E;

    vector<pair<int,int>> adj[V+1];

    for(int i = 0; i < E; i++)
    {
        int u,v,w;
        cin >> u >> v>>w;
        adj[u].push_back({v,w});
        adj[v].push_back({u,w});
    }

    Solution obj;
    cout<<obj.shortestPath(V,adj,1,5);

}

解决方法

尝试在此图中找到从 A 到 C 的最短路径:

A -9-> C
A -1-> B
B -1-> C

BFS 会给你 9(不正确),Dijkstra 最终会给你 1 + 1(正确)。因此,要获得正确的结果,您不能使用 BFS

问题中的shortestPath方法实现了Dijkstra's algorithm而不是BFS,因此它是正确的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。