弗洛伊德算法精解与模板
弗洛伊德算法是把图中每两个节点之间的最短路都求出来,有点就是之后可以查询没量个点之间距离且不用重复计算。需要两个二维数组,三层for循环。
思想是按顺序遍历每一条路径,找到与之等价并且更短的其他路径存入这个路径位置。
给出代码和样例图
#include
#include
#include
#define MM 0x3f3f3f3f
#define size 1002
using namespace std;
int n,m,j,i,k,l;
int a[size][size],b[size][size];
int main()
{while(~scanf("%d%d",&n,&m)&&n+m)//输入两个数,n点的总数,m边的总数{for(i=0; i=MM)continue;for(k=1; k<=n; k++){if(a[j][k]>a[j][i]+a[i][k]){a[j][k]=a[j][i]+a[i][k];b[j][k]=b[j][i];}}}}scanf("%d",&i);//查询的问题数while(i--){scanf("%d%d",&j,&k);//输入两个点输出之间的最短路if(a[j][k]
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
