BFS notes the problem of dictionary ordering. WA has a lot of hair.
#include <stdio.h>#include<math.h>#include<string.h>#include<vector>#include<algorithm>using namespacestd;Const intMAXN = -;intN, Cost[maxn][maxn],bb[maxn], JI[MAXN];structabc{intnode, Fei; intANS[MAXN]; intQ =0;} dt[90000];intMain () {intI, J, K, ans; while(~SCANF ("%d", &N)) {if(n = =0) Break; for(i =1; I <= N; i++) for(j =1; J <= N; J + +) scanf ("%d", &Cost[i][j]); for(i =1; I <= N; i++) scanf ("%d", &Bb[i]); intSt, et; while(1) {scanf ("%d%d", &st, &ET); if(St = =-1&& et =-1) Break; if(St = =ET) {printf ("From %d to%d: \ n", St, ET); printf ("Path:%d\n", ST); printf ("Total Cost:%d\n",0); printf ("\ n"); } Else { for(i =0; i < MAXN; i++) Ji[i] =999999999; intb =0; dt[0].node = st; dt[0].fei =0; dt[0].ans[0] =St; dt[0].Q =1; JI[ST] =0; intMinn =999999999; for(i =0; I <= b; i++) { for(j =1; J <= N; J + +) { if(Cost[dt[i].node][j]! =-1&& Dt[i].node! =j) {if(J = =ET) { if(Dt[i].fei + cost[dt[i].node][j] <=Ji[j]) {Ji[j]= Dt[i].fei +Cost[dt[i].node][j]; b++; Minn= Dt[i].fei +Cost[dt[i].node][j]; DT[B].Q= Dt[i].q +1; Dt[b].fei= Dt[i].fei +Cost[dt[i].node][j]; Dt[b].node=J; for(k =0; K < dt[b].q; k++) { if(K < DT[B].Q-1) Dt[b].ans[k] =Dt[i].ans[k]; Else if(k = = dt[b].q-1) Dt[b].ans[k] =J; } } } Else if(J! =ET) { if(Dt[i].fei + cost[dt[i].node][j] + bb[j] <=Ji[j]) {Ji[j]= Dt[i].fei + Cost[dt[i].node][j] +Bb[j]; b++; DT[B].Q= Dt[i].q +1; Dt[b].node=J; Dt[b].fei= Dt[i].fei + Cost[dt[i].node][j] +Bb[j]; for(k =0; K < dt[b].q; k++) { if(K < DT[B].Q-1) Dt[b].ans[k] =Dt[i].ans[k]; Else if(k = = dt[b].q-1) Dt[b].ans[k] =J; } } } } } } intKK; Chars[ +]; s[0] ='Z'; s[1] ='Z'; s[2] =' /'; Chark[ +]; for(i =0; I <= b; i++) { if(Dt[i].fei = = ji[et]&&dt[i].ans[dt[i].q-1]==ET) { for(KK =0; KK < dt[i].q; kk++) K[kk] =DT[I].ANS[KK]; K[DT[I].Q]=0; if(strcmp (S, k) >0) {strcpy (S, k); ans =i;} }} printf ("From %d to%d: \ n", St, ET); printf ("Path:"); for(i =0; i < dt[ans].q; i++) { if(I < DT[ANS].Q-1) printf ("%d-->", Dt[ans].ans[i]); Elseprintf"%d\n", Dt[ans].ans[i]); } printf ("Total Cost:%d\n", Dt[ans].fei); printf ("\ n"); } } } return 0;}
HDU 1385Minimum Transport Cost