最短路徑 POJ 2387

2021-07-31 07:56:03 字數 906 閱讀 6011

題目點這裡

給乙個無向圖,首先輸入兩個整數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和並查集都可...