P2009 跑步

認真讀題。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

你看,他這麼好看,那麼深情的望着你,你還傷心嗎?   

真的!這照片盯上他五秒鐘就想笑了。   

一切都會過去的。 

相關文章
相關標籤/搜索