最短路径+负圈-POJ3259 虫洞问题-图算法基础专项(2)

本文介绍了Bellman-Ford算法求解单源最短路径,并利用该算法判断图中是否存在负权圈。通过一个具体的POJ3259虫洞问题实例,解释了如何应用该算法解决时间旅行路径的存在性问题。

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

bellman-ford最短路径算法

bellman-ford 算法,是求单源点最短路径的算法。
我们设从起点到其他点i的最短路为d[i],

显然满足下列等式
d [ i ] = m i n { d [ j ] + c o s t ( j , i ) ∣ e = ( j , i ) ∈ E } d[i]=min \{ d[j]+cost(j,i) | e=(j,i) \in E \} d[i]=min{ d[j]+cost(j,i)e=(j,i)E}
含义是到一点的最短路肯定是,到与他相邻的点的最短路加上边的权值,最小的那条。

经过多次迭代上式就可以得到最短路径。
如果图中不存在负圈,那么在最短路径中一个顶点不可能经过2次。也就是说最多|V|-1条边。最多迭代|V|-1次,每迭代一次似乎在多加1条边的路径一起比较。

该算法也可以判断有无负圈,如果迭代超过|V|-1次,有负圈。

图表示方法

之前提到过邻接矩阵
现在介绍另一种边集表示法
用边集合来表示图

struct edge{
   
   
int from;
int to;
int cost;
}

struct edge es[MAX_E
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值