題目點這裡
給乙個無向圖,首先輸入兩個整數t和n,t 表示邊的數目,n表示頂點數目。接下來輸入 t 組資料,格式為u v w,求出第乙個頂點到最後乙個定點的最短路徑。
題目要求的是單源最短路,並且權值沒有負數,應用drikstra演算法即可求得。
需要乙個陣列dist用來儲存第乙個頂點f到所有頂點當前的最短路徑長度,乙個標記陣列visited用來標記是否已處理過。每次從未處理過的頂點集合中b選擇乙個與第乙個頂點距離最短的點p加入到集合中a中(用標記陣列即可識別哪些點處理過,哪些未處理過),然後更新所有與p連線的點j到f的距離,若distance(f,p)+distance(p,j)< distance(f,j),則更新。直到求出所有點到f的最小距離。
#include
#include
#include
using
namespace
std;
const
int maxn = 1005;
const
int inf = 1
<< 30;
int fileds[maxn][maxn];
int dist[maxn];
bool visited[maxn];
int n;
void dirkstra(int s)
}visited[k] = true;
for(j = 1;j <= n;++j) //更新
}}int main()
}for(int i = 1;i <= t;++i)
}dirkstra(1);
printf("%d\n",dist[n]);
}
SPFA 求最短路(poj2387)
目錄 spfa的演算法思想 動態逼近法 設立乙個先進先出的佇列q用來儲存待優化的結點,優化時每次取出隊首結點u,並且用u點當前的最短路徑估計值對離開u點所指向的結點v進行鬆弛操作,如果v點的最短路徑估計值有所調整,且v點不在當前的佇列中,就將v點放入隊尾。這樣不斷從佇列中取出結點來進行鬆弛操作,直至...
poj 2387 舊題重溫
這道題目原來已經a過了,應該用的是dijstra演算法 這次用spfa。只需要注意一點,有重邊,所以儲存鄰接矩陣的時候一定要判斷一下。include define maxn 1002 define inf 1000000000 int mat maxn maxn 鄰接矩陣 bool flag max...
POJ 最短路徑
這兩天做了六道最短路徑的問題,分別用了dijkstra演算法 spfa演算法和floyd演算法,甚至還有一道題用並查集做的也a了,感覺對短路徑已經學得很不錯了。poj1860,poj3259,poj1062,poj2253,poj1125,poj2240 poj2253,dijkstra和並查集都可...