多源最短路径Floyd-Warshall笔记

Floyd-Warshall算法:求任意两点之间的最短距离

问题描述:
——小哼准备去一些城市去旅游。为了节省经费以及方便旅程,小哼希望在出发之前知道任意两个城市之间的最短路程。

算法原理:
——动态规划思想,代码越看越迷。
——大概思想:若使顶点 i 到顶点 j 的距离缩短,必须引入第三个顶点 k 进行中转才有,一旦缩短,立刻更新 e [ i ] [ j ](直接距离),中转点可能需要多个,但存在更新保存,相当于不断的寻找第三个顶点 k 。

直接距离: i - > j
间接距离: i - > k - > j,一旦更新,就变为直接距离,其实不存在间接距离。

——如果理解了任意两点最短路径,该算法才可以算被真正理解。

时间复杂度:
——(n ^ 3),该算法只与顶点有关系,与边无关系。

特点:
——可解决含有负权边(边值为负数)图,图中可以存在环,但该环内所有边权值之和不能为负数。
——利用矩阵存图,无法使用邻接表。

Floyd-Warshall代码

for(k=1;k<=n;k++)
	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
			if(e[i][j]>e[i][k]+e[k][j])
				e[i][j]=e[i][k]+e[k][j];

//e[i][j]需要提前存储信息,不可直接到达为距离为无穷大
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值