Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 17989 Accepted Submission(s): 7642
2 1 1 2 3 3 3 1 2 5 2 3 5 3 1 2 0 0
3 2
#include <iostream> #include <stdlib.h> #include <algorithm> using namespace std; int n,m; int visit[105] , dis[105]; int map[105][105]; const int inf = 0x7f7f7f7; int Dijkstra( int start , int end ) { for( int i=0 ; i<=n ; i++ ){ visit[i] = 0; dis[i] = ( i==start ? 0 : map[i][start] ); } visit[1] = 1; int tmp , k; for( int i=1 ; i<=n ; i++ ){ tmp = inf; for( int j=1 ; j<=n ; j++ ){ if( !visit[j] && dis[j] < tmp ) tmp = dis[ k = j ]; } if( tmp == n ) break; visit[k] = 1; for( int j=1 ; j<=n ; j++ ){ if( !visit[j] && ( dis[j] > dis[k] + map[k][j] ) ) dis[j] = dis[k] + map[k][j]; } } return dis[end]; } int main() { while( scanf("%d%d",&n,&m) &&(n+m) ){ for( int i=1 ; i<=n ; i++ ) for( int j=1 ; j<=n ; j++ ) if( i==j ) map[i][j] = 0; else map[i][j] = inf; int start, end , value; for( int i=0 ; i<m ; i++ ){ scanf("%d%d%d",&start, &end , &value); if( map[start][end] > value ) map[start][end] = map[end][start] = value; } int ans; ans = Dijkstra( 1 , n ); printf("%d\n",ans); } return 0; }