我們在這裏有一個問題,我們試圖從一個節點到另一個節點查找圖中所有最短的路徑。我們已經實施了dijkstra,但我們真的不知道如何找到它們。Dijkstra的問題,找到所有最小路徑
我們是否必須使用BFS?
#include <vector>
#include <iostream>
#include <queue>
using namespace std;
typedef pair <int, int> dist_node;
typedef pair <int, int> edge;
const int MAXN = 10000;
const int INF = 1 << 30;
vector <edge> g[MAXN];
int d[MAXN];
int p[MAXN];
int dijkstra(int s, int n,int t){
for (int i = 0; i <= n; ++i){
d[i] = INF; p[i] = -1;
}
priority_queue < dist_node, vector <dist_node>,greater<dist_node> > q;
d[s] = 0;
q.push(dist_node(0, s));
while (!q.empty()){
int dist = q.top().first;
int cur = q.top().second;
q.pop();
if (dist > d[cur]) continue;
for (int i = 0; i < g[cur].size(); ++i){
int next = g[cur][i].first;
int w_extra = g[cur][i].second;
if (d[cur] + w_extra < d[next]){
d[next] = d[cur] + w_extra;
p[next] = cur;
q.push(dist_node(d[next], next));
}
}
}
return d[t];
}
vector <int> findpath (int t){
vector <int> path;
int cur=t;
while(cur != -1){
path.push_back(cur);
cur = p[cur];
}
reverse(path.begin(), path.end());
return path;
}
這是我們的代碼,我們相信我們必須修改它,但我們真的不知道在哪裏。
作業問題? :( –
spoj問題,證明我自己 – user2394968
我認爲Dijkstra只能解決單源最短路徑問題,而且你想爲所有需要類似[Floyd-Warshall](http://en.wikipedia)的頂點做這件事。 org/wiki/Floyd%E2%80%93Warshall_algorithm) – anana