题解(Floyd)

麦睿生  •  4天前


虽然楼下有了,但我还是发一发:

#include<bits/stdc++.h>
using namespace std;
long long n,m,s,t,a,b,x,emap[205][205],i,j,k; 
int main()
{
	scanf("%lld %lld",&n,&m);
	memset(emap,0x3f,sizeof(emap));
	for(i=1;i<=m;i++)
	{
		scanf("%lld %lld %lld",&a,&b,&x);
		emap[a][b]=x;
		emap[b][a]=x;
	}
	scanf("%lld %lld",&s,&t);
	for(k=0;k<=n;k++)
	{
		for(i=0;i<=n;i++)
		{
			for(j=0;j<=n;j++)
			{
				if(i!=j&&i!=k&&j!=k)
				{
					if(emap[i][k]+emap[k][j]<emap[i][j])
					{
						emap[i][j]=emap[i][k]+emap[k][j];
					}
				}
			}
		}
	}
	if(emap[s][t]>=1061109567)printf("-1");
	else printf("%lld",emap[s][t]);
	return 0;
}


评论: