http://poj.org/problem?id=1502
#include<stdio.h> #include<string.h> #include<stdlib.h> #define INF 0xffffff #define N 110 int map[N][N],vis[N],dis[N],n,min; void dijkstra(int x) { int i,j,k; memset(vis,0,sizeof(vis)); dis[x]=0; for(i=1;i<n;i++) dis[i]=INF; 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=1;j<n;j++) { if(!vis[j]&&dis[j]>dis[k]+map[k][j]) dis[j]=dis[k]+map[k][j]; } } } int main(void) { int i,j,k,max; char s[N]; while(scanf("%d",&n)!=EOF) { for(i=1;i<n;i++) { for(j=0;j<i;j++) { scanf("%s",s); if(s[0]=='x') map[i][j]=map[j][i]=INF; else map[i][j]=map[j][i]=atoi(s); } } dijkstra(0); max=0; for(k=1;k<n;k++) if(dis[k]>max) max=dis[k]; printf("%d\n",max); } return 0; }