Floyd算法 笔记 C/C++

个人笔记,仅供复习

1.适用范围:求每一对顶点之前的最短路径(适用稠密图)

2.算法思想:在一般情况下,若(vi,…,vk )和( vk,…,vj )分别是从 vi 到 vk 和从 vk 到 vj 的 中间顶点的序号不大于k的最短路径,则将( vi,…, vk ,… , vj )和已经得到的从vi到vj且中间顶点的序号不大于k-1的最短路径相比较,其长度较短者便是从vi到vj的中间顶点的序号不大于k的最短路径。这样,在经过n次比较后,最后求得的必是从vi到vj的最短路径。按此方法,可以同时求得各对顶点间的最短路径。

3.具体步奏:其中D(k)[i][j],表示只经过顶点编号小于k的顶点i与j的最短路径。

4.代码参考:

void Floyd()
{ 
	for ( i = 0; i < N; i++ )
		for( j = 0; j < N; j++ ) {
			D[i][j] = G[i][j];
			path[i][j] = -1;
		}
		for( k = 0; k < N; k++ )
			for( i = 0; i < N; i++ )
				for( j = 0; j < N; j++ )
				if( D[i][k] + D[k][j] < D[i][j] ) {
					D[i][j] = D[i][k] + D[k][j];
					path[i][j] = k;
				}
}

转载于:https://www.cnblogs.com/long98/p/10352228.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值