Floyd算法注意事项

发布时间 2023-04-16 20:03:01作者: 珂兰洁

注意事项: 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];
}