認真讀題。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
你看,他這麼好看,那麼深情的望着你,你還傷心嗎?
真的!這照片盯上他五秒鐘就想笑了。
一切都會過去的。