[HDU](2544)最短路 ---单源最短路径(图)
在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗?
Input
输入保证至少存在1条商店到赛场的路线。
2 1 1 2 3 3 3 1 2 5 2 3 5 3 1 2 0 0
Sample Output
3
2AC代码:dijkstra算法,模板题
#include<iostream> #include<cstring> using namespace std; int mmap[1005][1005]; bool vis[1005]; int dist[1005]; int n,m; #define INF 0x3f3f3f3f void dijkstra(int x) { for(int i=1;i<=n;i++) dist[i]=mmap[x][i]; int mmin; int k; for(int i=1;i<=n;i++) { mmin=INF; for(int j=1;j<=n;j++) { if(!vis[j] && dist[j]<mmin) { mmin=dist[j]; k=j; } } vis[k]=true; for(int j=1;j<=n;j++) { if(!vis[j] && dist[k]+mmap[k][j]<dist[j]) dist[j]=dist[k]+mmap[k][j]; } } } int main() { int u,v,w; while(cin>>n>>m &&n &&m) { memset(mmap,0,sizeof(mmap)); memset(vis,false,sizeof(vis)); memset(dist,0,sizeof(dist)); for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(i==j) mmap[i][j]=0; else mmap[i][j]=INF; } } while(m--) { cin>>u>>v>>w; if(w<mmap[u][v]) { mmap[u][v]=mmap[v][u]=w; } } vis[1]=true; dijkstra(1); cout<<dist[n]<<endl; } return 0; }