P2009 跑步

题目传送门

热烈庆祝SZM黄题破80,绿题破30,蓝题破20!!!(紫题还是2,,,,orz%%%)

非常水的一道最短路,小于等于100果断Floyd,要好好读题,别忘记特判,8分钟基本就能做出来啦~~~

参考程序如下:

 1 #include<iostream>
 2 #include<cstring>
 3 #define inf 336860180 
 4 using namespace std;
 5 int dist[101][101],n,k,x,y,z;
 6 char a,b;
 7 int main()
 8 {
 9     memset(dist,20,sizeof(dist));
10     cin>>n>>k;
11     for(int i=1;i<=n;i++)
12     {
13         cin>>z;
14         if(i!=n)x=i,y=i+1;
15         else x=i,y=1;
16         if(dist[x][y]==inf)dist[x][y]=dist[y][x]=z;
17         else dist[x][y]=dist[y][x]=max(dist[x][y],z);
18     }
19     for(int i=1;i<=k;i++)
20     {
21         cin>>a>>b>>z;
22         x=(a-'A'+1);y=(b-'A'+1);
23         if(dist[x][y]==inf)dist[x][y]=dist[y][x]=z;
24         else dist[x][y]=dist[y][x]=max(dist[x][y],z);
25     }
26     for(int k=1;k<=n;k++)
27     {
28         for(int i=1;i<=n;i++)
29         {
30             for(int j=1;j<=n;j++)
31             {
32                 dist[i][j]=min(dist[i][j],dist[i][k]+dist[k][j]);
33             }
34         }
35     }
36     cin>>a>>b;
37     x=a-'A'+1;y=b-'A'+1;
38     cout<<dist[x][y];
39     return 0;
40 }
View Code

  

原文地址:https://www.cnblogs.com/szmssf/p/11000255.html