博客园 首页 私信博主 显示目录 隐藏目录 管理 动画

Floyd算法注意事项

注意事项: k 层循环不能内置

Floyd适用于求解全源最短路径问题,即对于给定的图G,求解任意两点之间的最短路径长度。

模板

#include<bits/stdc++.h>
using namespace std;
const int N=105;
int dis[N][N];
void Floyd(){
	memset(dis,0x3f3f3f,sizeof(dis));//初始化为极大值 
	
	//初始化大部分时候需要放到读入前
	//顶点i和j没有边直接相连则距离设为极大值,有边相连就是读入的距离 
	
	/*
	for(int i=1;i<=n;i++)//自己到自己的距离设为 0 
		dis[i][i]=0;
	*/
	//可省略
		
	for(int k=1;k<=n;k++)//k层循环不能内置 
		for(int i=1;i<=n;i++)
			for(int j=1;j<=n;j++)
				if(dis[i][k]+dis[k][j]<dis[i][j])//松弛 
					dis[i][j]=dis[i][k]+dis[k][j];
}

 

posted @ 2023-04-16 19:57  珂兰洁  阅读(39)  评论(0)    收藏  举报