Floyd(弗洛伊德)算法代码详解

本文深入讲解了Floyd算法,一种利用动态规划思想寻找加权图中所有顶点间最短路径的经典算法。通过详细的代码解析,展示了如何初始化最短路径矩阵,并通过三层循环不断优化路径,实现对任意两点间最短路径的精确计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Floyd

是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法

关键代码

vector<vector<int>> Floyd(vector<vector<int>> matrix) {
	vector<vector<int>> m = matrix;				//matrix是邻接矩阵,m为matrix的复制
	vector<vector<int>> s(matrix.size(),vector<int>(matrix.size()));	//s是最短路径矩阵
	for (int i = 0; i < s.size(); i++) {		//双层循环赋值,初始值为列值,对角线上值为-1
		for (int j = 0; j < s.size(); j++) {
			if (i != j)s[i][j] = j;
			else s[i][j] = -1;
		}
	}
	for (int i = 0; i < m.size(); i++) {			//第一层循环为研究两点路径间经过i点是否距离更短
		for (int j = 0; j < m.size(); j++) {		//第二层循环为起点j
			for (int k = 0; k < m.size(); k++) {	//第三层循环为终点k
				if (m[j][k] > m[j][i] + m[i][k]) {	//如果发现当前两点间距离大于经过i点再到达终点的距离
					m[j][k] = m[j][i] + m[i][k];	//更新两点间距,m[j][k]为j到k的距离,s[j][k]为j到k要先经过的点
					s[j][k] = i;					//更新路径,j到k要先经过i
				}
			}
		}
	}
	return s;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值