2 1 1 2 3 3 3 1 2 5 2 3 5 3 1 2 0 0
3 2
#include<cstdio> #include<cstring> #define inf 99999 int n,m,vis[110],map[110][110],dis[110]; void init() { int i,j,k; memset(vis,0,sizeof(vis)); for(i=1; i<=n; i++) { for(j=1; j<=n; j++) { if(i==j) map[i][j]=0; else map[i][j]=inf; } } } void dijkstra() { int i,j,k,temp; for(i=1; i<=n; i++) dis[i]=inf; dis[1]=0; for(i=1; i<=n; i++) { temp=inf; for(j=1; j<=n; j++) { if(!vis[j]&&dis[j]<temp) { temp=dis[j]; k=j; } } 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]; } } } printf("%d\n",dis[n]); } int main() { int a,b,val; while(scanf("%d %d",&n,&m)&&(n||m)) { init(); for(int i=0; i<m; i++) { scanf("%d %d %d",&a,&b,&val); if(map[a][b]>val) map[a][b]=map[b][a]=val; } dijkstra(); } return 0; }