http://acm.hdu.edu.cn/showproblem.php?pid=2544
最短路径第一题
#include<stdio.h> #include<string.h> #define INF 0xfffffff #define N 600 int map[N][N],vis[N],dis[N],n,m,min; void dijkstra() { int i,j,k; memset(vis,0,sizeof(vis)); vis[0]=1; dis[0]=0; for(i=1;i<n;i++) dis[i]=map[0][i]; for(i=1;i<n;i++) { min=INF; for(j=0;j<n;j++) if(!vis[j]&&dis[j]<min) { min=dis[j]; k=j; } if(min==INF) break; vis[k]=1; for(j=0;j<n;j++) if(!vis[j]&&dis[j]>dis[k]+map[k][j]) dis[j]=dis[k]+map[k][j]; } printf("%d\n",dis[n-1]); } int main(void) { int a,b,c,i,j,k; while(scanf("%d%d",&n,&m),n||m) { for(i=0;i<n;i++) for(j=0;j<n;j++) map[i][j]=INF; for(k=0;k<m;k++) { scanf("%d%d%d",&a,&b,&c); map[a-1][b-1]=map[b-1][a-1]=c; } dijkstra(); } return 0; }