#include <iostream> #include <fstream> #define min(x, y) (((x)<(y) ?(x):(y))) using namespace std; int const inf = 0x0f0f0f0f; int const MAXSIZE = 201; int N, M; void dijkstra(int a[MAXSIZE][MAXSIZE],int S, int T) { int min[1001],v[MAXSIZE]; int i, j, k; memset(v, 0, sizeof v); for(i=0; i<N; i++) min[i] = a[S][i]; // memset(min, inf, sizeof min); for(min[S]=0, i=0; i<N; i++) { for(k=-1, j=0; j<N; j++) if(!v[j] && (k==-1 || min[j]<min[k])) k = j; for(v[k]=1, j=0; j<N; j++) if(!v[j] && min[k]+a[k][j] < min[j]) min[j] = min[k] + a[k][j]; } if(min[T] == inf) cout<<"-1"<<endl; else cout<<min[T]<<endl;; } int main() { //ifstream in("OpenJudgeText.txt"); int a[MAXSIZE][MAXSIZE]; int i, A, B, X, S, T; while(cin>>N>>M) { memset(a, inf, sizeof a); for(i=0; i<M; i++) { cin>>A>>B>>X; a[A][B]= a[B][A] = min(a[A][B], X); } cin>>S>>T; dijkstra(a,S,T); } // cin>>i; return 0; }
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 8870 Accepted Submission(s): 2960
3 3 0 1 1 0 2 3 1 2 1 0 2 3 1 0 1 1 1 2
2 -1
WA一个小时, 纳闷, 错在纪录数据阶段。
A到B城市可以有多条道路, 一条为4一条为5,
选择最小的那条道路。