HDU1874-畅通工程续
http://acm.hdu.edu.cn/showproblem.php?pid=1874
简单
#include<stdio.h> #include<string.h> #define INF 0xfffffff #define N 600 int map[N][N],dis[N],vis[N],n,m,min; void dijkstra(int s,int t) { int i,j,k; memset(vis,0,sizeof(vis)); for(i=0;i<n;i++) dis[i]=map[s][i]; vis[s]=1; dis[s]=0; for(i=0;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]; } if(dis[t]!=INF) printf("%d\n",dis[t]); else printf("-1\n"); } int main(void) { int A,B,X,i,j,S,T; while(scanf("%d%d",&n,&m)!=EOF) { for(i=0;i<N;i++) for(j=0;j<N;j++) map[i][j]=INF; for(i=0;i<m;i++) { scanf("%d%d%d",&A,&B,&X); if(map[A][B]>X) map[A][B]=map[B][A]=X; } scanf("%d%d",&S,&T); dijkstra(S,T); } return 0; }