HDOJ 2544 - 最短路 SPFA算法
因为QM混乱的原因,白白WA了好几次
AC 0MS 228K
1 #include <queue> 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <memory.h> 5 using namespace std; 6 7 const int maxn = 101; 8 const int INF = 0x3F3F3F3F; 9 10 int a, b, c, nNum, mNum; 11 int g[maxn][maxn], QM[maxn], dist[maxn]; 12 13 int SPFA() 14 { 15 int x; 16 queue <int> q; 17 18 q.push(1); 19 QM[1] = 1, dist[1] = 0; 20 21 while (!q.empty()) 22 { 23 x = q.front(); 24 q.pop(); 25 QM[x] = 0; /* Took Away*/ 26 27 for (int i=1; i<=nNum; ++i) 28 { 29 if (dist[i] > dist[x]+g[x][i]) 30 { 31 dist[i] = dist[x] + g[x][i]; /* change the weight */ 32 33 /* push into queue if vertex i is QM of queue */ 34 if (QM[i] == 0) 35 { 36 QM[i] = 1; 37 q.push(i); 38 } 39 } 40 }/* End of For */ 41 }/* End of While */ 42 43 return dist[nNum]; 44 }/* SPFA */ 45 46 int main() 47 { 48 while (~scanf("%d %d", &nNum, &mNum), nNum+mNum!=0) 49 { 50 memset(g, INF, sizeof(g)); 51 memset(QM, 0, sizeof(QM)); 52 memset(dist, INF, sizeof(dist)); 53 54 for (int i=1; i<=mNum; ++i) 55 { 56 scanf("%d %d %d", &a, &b, &c); 57 g[a][b] = g[b][a] = c; /* Adjcent Matrix */ 58 }/* End of For */ 59 60 printf("%d\n", SPFA()); /* Solve with spfa algorithm */ 61 }/* End of While */ 62 63 return 0; 64 }