HDU1874畅通工程续(floyd||dijkstra)

原文链接: http://www.cnblogs.com/gj-Acit/p/3204131.html

 

看了看floyd和dijkstra,然后就找了两个练习来捉

 

 1 #include
 2 #include
 3 #include<string.h>
 4 #include
 5 #include
 6 #include<set>
 7 #include
 8 #include
 9 #include
10 #include
11 using namespace std;
12 #define MAX(a,b) (a > b ? a : b)
13 #define MIN(a,b) (a < b ? a : b)
14 #define MAXN  10000001
15 #define INF 1000000007
16 #define mem(a) memset(a,0,sizeof(a))
17 
18 int w[200][200];
19 int d[200];
20 int vis[200];
21 int n;
22 
23 void dijkstra(int s)
24 {
25     d[s]=0;
26     for(int k=0;k)
27     {
28         int m=INF;
29         for(int i=0;i)
30         {
31             if(!vis[i] && d[i]<=m)
32                 m=d[s=i];
33         }
34         vis[s] = 1;
35         for(int i=0;i)
36         {
37             d[i]=MIN(d[i], d[s]+w[s][i]);
38         }
39     }
40 }
41 
42 /*
43 void floyd()
44 {
45     for(int k=0;k46     {
47         for(int i=0;i48         {
49             for(int j=0;j50             {
51                 w[i][j] = MIN(w[i][j], w[i][k] + w[k][j]);
52             }
53         }
54     }
55 }
56 */
57 
58 int main()
59 {
60     //freopen("in.txt","r",stdin);
61     //freopen("out.txt","w",stdout);
62     int m;
63     while(~scanf("%d%d",&n,&m))
64     {
65         mem(vis);
66         for(int i=0;i)
67         {
68             d[i]=INF;
69             for(int j=0;j)
70             {
71                 w[i][j]=INF;
72             }
73         }
74         int a,b,x;
75         for(int i=0;i)
76         {
77             scanf("%d%d%d",&a,&b,&x);
78             if(w[a][b]>x)w[a][b] = w[b][a] = x;
79         }
80         int s,t;
81         scanf("%d%d",&s,&t);
82         if(s==t){printf("0\n");continue;}
83 
84         dijkstra(s);   printf("%d\n",d[t] == INF?-1 : d[t]);
85 
86  //       floyd();   printf("%d\n",w[s][t]==INF?-1:w[s][t]);
87 
88 
89     }
90     return 0;
91 }

 

 

 

转载于:https://www.cnblogs.com/gj-Acit/p/3204131.html

你可能感兴趣的:(HDU1874畅通工程续(floyd||dijkstra))