凌艺樽 • 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;
}
勿抄袭,有坑。
评论: