认真读题。ios
弗洛伊德,spa
初始化为极大值,若是是本身到本身则赋值为0;blog
而后注意输入时那个环上权值的赋值操做,比较好理解;ci
把字符转化为数字作下标,string
若是不为极大值的话,说明已经被赋值了,已经有直接链接这两个点的路了,it
根据题目要求,这种状况下咱们要取较大的那个;io
若是为极大值,说明尚未被赋值,此时直接赋值为输入的权值;class
而后就是弗洛伊德求最短路的操做了。 stream
#include<iostream> #include<cstdio> #include<cmath> #include<algorithm> #include<cstring> using namespace std; const int mod=1e9+7; int n,m,x,a,b; int f[22][22]; char c; int main() { scanf("%d%d",&n,&m); for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) f[i][j]=(i!=j)?mod:0; for(int i=1;i<=n;++i) { scanf("%d",&x); if(i!=n) { f[i][i+1]=x; f[i+1][i]=x; } else { f[1][n]=x; f[n][1]=x; } } for(int i=1;i<=m;++i) { cin>>c;a=c-'A'+1; cin>>c;b=c-'A'+1; cin>>x; if(f[a][b]!=mod) f[a][b]=f[b][a]=max(x,f[a][b]); else f[a][b]=f[b][a]=x; } for(int k=1;k<=n;++k) for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) f[i][j]=min(f[i][j],f[i][k]+f[k][j]); cin>>c;a=c-'A'+1; cin>>c;b=c-'A'+1; printf("%d",f[a][b]); return 0; }
若是你不开心,那我就把右边这个帅傻子分享给你吧, im
你看,他这么好看,那么深情的望着你,你还伤心吗?
真的!这照片盯上他五秒钟就想笑了。
一切都会过去的。