floyd模板

算法思路

每次枚举点设置为桥边(中转点),每次试探是否有路径长度被更改
重复操作直到每个点都插入完成

//动态规划 多源最短路 Floyd
//邻接矩阵存图 初始化点到自己设为0 其他为正无穷
//枚举每一个桥边,依次松弛操作

const int n=105;
int g[n][n],p[n][n];

//打印桥点 中序遍历
void path(int i,int j){
	if(p[i][j]==0) return;
	int k = p[i][j];
	path(i,k);
	cout << k << " ";
	path(k,j);
}

void floyd(){
	for(int k=1;k<=n;k++){
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++){
				if(g[i][j]>g[i][k]+g[k][j]){
					g[i][j] = g[i][k]+g[k][j];
					p[i][j] = k;
				}
			}
		}
	}
}
posted @ 2024-03-10 19:25  Nijika  阅读(5)  评论(0)    收藏  举报