題目:hdu4460
題意:尋找每兩點之間最短路中的最長路。若存在某兩點不連通,就輸出-1.
解答:對每個點spfa,然後找最長的邊。用鄰接鍊錶存~~注意:雙向邊!
#include#include#include#include#include#include#includeusing namespace std;
const int maxn = 10010 + 10010;
const int inf = 1 << 30;
int w[maxn],u[maxn],v[maxn];
int first[1100],next[maxn],dis[1100];
int book[1100];
int ans;
int n,m;
queueq;
int spfa(int a)
}k = next[k];
}book[q.front()] = 0;
q.pop();
}return 0;
}int main()
for(int i = 0;i < n;i++)
first[i] = -1;
scanf("%d",&m);
for(int i = 0;i < 2*m;i+=2)
m = m * 2;
int result = 0;
for(int i = 0;i < n;i++)
result = max(result,dis[j]);
}if(ok == 0)
break;
}printf("%d\n",result);
}return 0;
}
兩點間多條最短路徑
最短路徑的求法可能都知道,弗洛伊德和迪克斯特拉。這兩種方法都是求一條最短路徑,如果你想求多條最短路徑那就只能選擇其他方法了。網上已經有幾種演算法可以求多條最短路徑,最常見的就是刪邊法 迪克斯特拉。就是用狄克斯特拉求出一條最短路徑然後把最短路徑上的邊一條一條的刪除然後再求最短路徑。這個方法比較容易想但...
Dijkstra演算法求兩點最短路徑
對於下圖使用dijkstra演算法求由頂點a到頂點h的最短路徑,按實驗報告模板編寫演算法。選取乙個起始點加入集合a,剩餘點加入集合b 計算集合b中的點到初始點的距離dis i 若不相鄰的距離無窮大,否則為權值 選取最小的dis i 計為dis x 並將點x加入集合a 更新和點x相鄰的點y的dis值 ...
兩點間最短路徑及所有路徑
private setnodes private map links private mapweights nodes用於儲存所有節點,不重複 links為鄰接表 weights為邊上的權值。1 兩點間最短路徑 dijkstra演算法 實現 為 public path shortestpath in...