热烈庆祝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 }