http://poj.org/problem?id=1797
简单
#include<stdio.h> #include<string.h> #define N 1002 int map[N][N],dis[N],vis[N],n,m,Max; void dijkstra() { int i,j,k; memset(vis,0,sizeof(vis)); memset(dis,0,sizeof(dis)); for(i=1;i<=n;i++) dis[i]=map[1][i]; vis[1]=1; for(i=1;i<=n;i++) { Max=0; k=-1; for(j=1;j<=n;j++) if(!vis[j]&&dis[j]>Max) { Max=dis[j]; k=j; } if(k==-1) break; vis[k]=1; for(j=1;j<=n;j++) if(!vis[j]&&(dis[k]<map[k][j]?dis[k]:map[k][j])>dis[j]) dis[j]=(dis[k]<map[k][j]?dis[k]:map[k][j]); } printf("%d\n\n",dis[n]); } int main(void) { int i,j,a,b,c,T,count; while(scanf("%d",&T)!=EOF) { count=1; while(T--) { scanf("%d%d",&n,&m); for(i=1;i<=n;i++) for(j=1;j<=n;j++) map[i][j]=0; while(m--) { scanf("%d%d%d",&a,&b,&c); map[a][b]=map[b][a]=c; } printf("Scenario #%d:\n",count++); dijkstra(); } } }