spfa
1 #include <stdio.h> 2 #include <queue> 3 using namespace std; 4 5 #define RANGE 101 6 #define MAX 0x3f3f3f3f 7 int cost[RANGE][RANGE]; 8 int d[RANGE]; 9 bool used[RANGE]; 10 int n,m; 11 12 void spfa( int s ) 13 { 14 int i,now; 15 // 初始化 16 for( i=1;i<=n;++i ) 17 { 18 d[i]=MAX; 19 used[i]=false; 20 } 21 22 d[s]=0; 23 queue <int> q; 24 q.push(s); 25 used[s] = true; 26 27 while(!q.empty()) 28 { 29 now = q.front(); 30 q.pop(); 31 used[now] = false; 32 for(i = 1; i <= n; i++) 33 { 34 if(d[i] > d[now] + cost[now][i]) 35 { 36 d[i] = d[now] + cost[now][i]; 37 if(used[i] == 0) 38 { 39 q.push(i); 40 used[i] = true; 41 } 42 } 43 } 44 } 45 } 46 47 int main() 48 { 49 int i,j,A,B,C; 50 while( scanf("%d%d",&n,&m) ) 51 { 52 if( !n && !m ) break; 53 // 初始化 54 for( i=1;i<=n;++i ) 55 for( j=1;j<=i;++j ) 56 if( i==j ) cost[i][j]=0; 57 else cost[i][j]=cost[j][i]=MAX; 58 59 for( i=0;i<m;++i ) 60 { 61 scanf("%d%d%d",&A,&B,&C); 62 cost[A][B]=cost[B][A]=C; 63 } 64 65 spfa(1); 66 printf("%d\n",d[n]); 67 } 68 return 0; 69 }