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 }
View Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-06-28
  • 2022-12-23
  • 2021-05-08
  • 2021-07-06
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-06-08
  • 2022-12-23
  • 2022-02-15
  • 2021-08-30
相关资源
相似解决方案