Dijkstra 單源最短路(一)
阿新 • • 發佈:2018-11-19
#include<iostream> #include <cstring> #define INF 0x3f3f3f3f #define MAX_N 10001 using namespace std; int g[MAX_N][MAX_N]; int dist[MAX_N]; int sure[MAX_N]; int n,m; void dijkstra(int begin) { dist[begin] = 0; while(1) { int i, u=-1, v; int min = INF; for(i=1;i<=n;i++) { if(!sure[i] && dist[i]<min) { min = dist[i]; u = i; } } if(u==-1) break; sure[u] = 1; for(v=1;v<=n;v++) if(g[u][v]!=-1 && dist[v]>dist[u]+g[u][v]) dist[v] = dist[u] + g[u][v] > dist[v] ? dist[v]: dist[u]+g[u][v]; } } int main() { while(cin>>n>>m&&m&&n) { int a,b,c; int i; memset(dist,0x3f3f3f,sizeof(dist)); memset(sure,0,sizeof(sure)); memset(g,-1,sizeof(g)); for(i=0;i<m;i++) { cin>>a>>b>>c; g[a][b] = g[b][a] = c; } dijkstra(1); cout<<dist[n]<<endl; } return 0; }