一.求任意两点间的最短路径(有权图)
Floyd算法代码:
#include<bits/stdc++.h>
using namespace std;
int dis[100][100],x,y,z;
int n,m,p; //n,m分别代表图的边和节点
int main()
{
memset(dis,0x3f,sizeof(dis));
cin>>n>>m;
for(int i=1;i<=n;i++)
{
//存图
cin>>x>>y>>z; //输入边对应的2个节点以及权重;
dis[x][y]=dis[y][x]=z;
}
Floyd();
//进行p次访问:
cin>>p;
while(p–)
{
cin>>x>>y;
cout<<dis[x][y]<<endl;
}
return 0;
}
void Floyd()
{
for(int k=1;k<=m;k++) //枚举状态转移点,即中间经过的点
{
for(int i=1;i<=m;i++)
{
for(int j=1;j<=m;j++) //枚举起点和终点
dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
}
}
}
图论之Floyd算法总结
最新推荐文章于 2023-02-10 10:15:53 发布