hdu 1874 畅通工程续

今天有点小偷懒了。。。   早上的时候就只敲了两个最短路径的题目,之所以说偷懒  。。  是因为之前就敲过了。。  

好了  不说 废话   队友闲我啰嗦,先用了一个floyd 这个比较浪费时间的。。 

不过之后写的djs就还行了。。。 

不说了  直接看代码

View Code
 1   #include<iostream>
 2   #define min(a,b)  a<b?a:b
 3   #define INF 100000000
 4   using namespace std;
 5   int map[220][220];
 6   int main()
 7   {
 8      int m,n,s,e,w;
 9      while(scanf("%d%d",&n,&m)!=EOF)
10      {
11           for(int i=0;i<n;i++)
12           {
13              for(int j=0;j<n;j++)
14              {
15                 if(i==j)map[i][j]=0;
16                 else
17                 map[i][j]=INF;        
18              }        
19           }
20           for(int i=0;i<m;i++)
21           {
22                 scanf("%d%d%d",&s,&e,&w);
23                 if(w<map[s][e])
24                 {
25                   map[s][e]=w;
26                   map[e][s]=w; 
27                 }
28           }
29           scanf("%d%d",&s,&e);
30           for(int i=0;i<n;i++)
31             for(int j=0;j<n;j++)
32                for(int k=0;k<n;k++)
33                {
34                     map[j][k]=min(map[j][k],map[j][i]+map[i][k]);
35                }
36           if(map[s][e]<INF)
37             printf("%d\n",map[s][e]);
38           else
39             printf("-1\n");
40      }
41      return 0;    
42   }
43   
44   Djs
45   #include<iostream>
46   #define min(a,b) a<b?a:b 
47   #define INF 10000000
48   using namespace std;
49   int map[202][202];
50   int q[200];
51   int main()
52   {
53      int n,m,s,e,w,head,tail;
54      while(scanf("%d%d",&n,&m)!=EOF)
55      {
56          for(int i=0;i<n;i++)
57          {
58             for(int j=0;j<n;j++)
59             {
60                  if(i==j)map[i][j]=0;
61                  else
62                  map[i][j]=INF; 
63             }        
64          }
65          head=tail=0;
66          for(int i=0;i<m;i++)
67          {
68             scanf("%d%d%d",&s,&e,&w);
69             map[e][s]=map[s][e]=min(map[s][e],w);
70          }
71          scanf("%d%d",&s,&e);
72          for(int i=0;i<n;i++)
73          {
74              if(map[s][i]<INF&&s!=i){q[tail++]=i;}
75          }
76          visit[s]=1;
77          while(head<tail)
78          {
79               for(int i=0;i<n;i++)
80               {
81                  if(map[s][q[head]]+map[q[head]][i]<map[s][i])
82                  {
83                     map[s][i]=map[s][q[head]]+map[q[head]][i];
84                     q[tail++]=i;
85                  }
86               }
87               head++;
88          }
89          if(map[s][e]<INF)
90          printf("%d\n",map[s][e]);
91          else
92          printf("-1\n");
93      }
94      return 0;    
95   }
原文地址:https://www.cnblogs.com/nuoyan2010/p/2667114.html