#include <bits/stdc++.h>
#define MAXN 100005
#define MAXM 1000005
#define INF (int)1e9
using namespace std;
int head[MAXN], Next[MAXM], vet[MAXM],cost[MAXM], cnt;
void add(int x, int y, int c){
cnt++;
Next[cnt] = head[x];
head[x] = cnt;
vet[cnt] = y;
cost[cnt] = c;
}
int n,m;
int dis[MAXN], vis[MAXN];
void init(){
for (int i = 1; i <= n; ++i) {
head[i] = -1;
dis[i] = INF;
vis[i] = 0;
}
}
void SPFA(int s){
dis[s] = 0;
queue<int> q;
q.push(s);
vis[s] = 1;
while(!q.empty()){
int t = q.front();
q.pop();
vis[t] = 0;
for (int i = head[t]; i != -1; i = Next[i]) {
if(dis[vet[i]] > dis[t]+cost[i]){
dis[vet[i]] = dis[t]+cost[i];
if(!vis[vet[i]]) {
q.push(vet[i]);
vis[vet[i]] = 1;
}
}
}
}
}
int main()
{
int s;
cin >> n >> m;
int x,y,c;
init();
for (int i = 0; i < m; ++i) {
scanf("%d%d%d",&x, &y, &c);
if(x == y) //判断自环
continue;
add(x,y,c);
add(y,x,c);
}
SPFA(1);
// for (int i = 1; i <= n; ++i) {
// cout << dis[i] << " ";
// }
cout << dis[n] << endl;
return 0;
}
最短路径之SPFA算法(边表)
猜你喜欢
转载自blog.csdn.net/qq_30115697/article/details/81839201
今日推荐
周排行