Floyd算法求图最短路径问题(基于邻接矩阵)

Floyd算法是一种动态规划方法,用于找出图中所有顶点之间的最短路径。它通过引入中转点来更新最短路径信息。核心思想是检查每个顶点作为中转点是否能降低路径成本。算法通过比较当前边的代价与经过中转点的代价,若后者更优则更新路径。示例展示了算法如何在邻接矩阵中操作以找到最短路径。
摘要由CSDN通过智能技术生成

什么是图的最短路径?

就是给出两个带权图中的顶点,求出这个两个顶点之间权值或者说代价最小的路径。

算法思想

在图的最短路径问题上,相比于dijkstra算法求解单源最短路径,Floyd算法可以很好解决各个顶点之间的最短路径问题。个人总结:Floyd算法核心就是一种利用动态规划,求解问题,核心就是关于中转点的引入是否会引起最短路径变化展开思考

在之前,我们考虑最短路径问题时候,一般是从当前点出发,查看当前点的最短路径顶点,但是这个最短路径是对于相邻点,对于不相邻的点,最短路径会发生变化,变化的产生就是“中转点”的引入,在中转点的帮助下,两点的最短路径就会变化,这也是算法设计的初衷,就是探讨中转点引入带来的变化。

下面是实现算法的核心代码

void Floyd(MGraph &g) {
	//初始化一个path矩阵
	MGraph path = PreparePathGraph(g.vertex_number);

	//遍历每一条边,开始比较在引入中转点之后的权值大小
	for (int i = 0; i < g.vertex_number; i++)
	{
		for (int j = 0; j < g.vertex_number; j++)
		{
				for (int k = 0; k < g.vertex_number; k++)
				{
	
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值