题解

凌艺樽  •  9天前


注意双向建边,Floyd从零开始跑即可。

#include<bits/stdc++.h>
using namespace std;

const int N=1e2+10;
int n,m,x,y,dis[N][N];

int main()
{
	cin>>n>>m;
	memset(dis,0x3f,sizeof(dis));
	for(int i=1;i<=m;++i)
	{
		int u,v,w;
		cin>>u>>v>>w;
		dis[u][v]=w;
		dis[v][u]=w;
	}
	cin>>x>>y;
	for(int k=0;k<=n;++k)
	{
		for(int i=0;i<=n;++i)
		{
			for(int j=0;j<=n;++j)
			{
				if(dis[i][j]>dis[i][k]+dis[k][j])
				{
					dis[i][j]=dis[i][k]+dis[k][j];
				} 
			}
		}
	}
	if(dis[x][y]<0x3f)cout<<dis[x][y];
	else cout<<-1;
	return 0;
} 

勿抄袭,有坑。


评论: