如何判断图中存环(正负)
1.正環
用 SPFA不斷的進行松弛操作,發現當前金額可以比本身大就更新,同時記錄更新次數。如果更新次數超過n次,說明存在”正“環。
2.負環
這里先說明下負環。(求最短距離的時候)
在我們用SPFA求最短路徑的時候,如果存在負環,在松弛操作的時候總會加入隊列 因為最小距離會越來越小,同樣這里如果經過一次次的轉換,如果可以使本金增大,那么松弛操作也會無限進行下去,我們以n為界限,超過n就說明存在正環,也就說明可以使本金增大。
用spfa算法。經驗證:當一個點重復進入隊列n次以上,就存在負環。?
?
題目大意:
有多種匯幣,匯幣之間可以交換,這需要手續費,當你用100A幣交換B幣時,A到B的匯率是29.75,手續費是0.39,那么你可以得到(100 - 0.39) * 29.75 = 2963.3975 B幣。問s幣的金額經過交換最終得到的s幣金額數能否增加?
貨幣的交換是可以重復多次的,所以我們需要找出是否存在正權回路,且最后得到的s金額是增加的
怎么找正權回路呢?(正權回路:在這一回路上,頂點的權值能不斷增加即能一直進行松弛)
解題思路:單源最短路徑算法,因為題目可能存在負邊,所以用Bellman Ford算法,
原始Bellman Ford可以用來求負環,這題需要改進一下用來求正環
本題是“求最大路徑”,之所以被歸類為“求最小路徑”是因為本題題恰恰與bellman-Ford算法的松弛條件相反,
求的是能無限松弛的最大正權路徑,但是依然能夠利用bellman-Ford的思想去解題。
因此初始化dis(S)=V?? 而源點到其他點的距離(權值)初始化為無窮小(0),當s到其他某點的距離能不斷變大時,
說明存在最大路徑;如果可以一直變大,說明存在正環。判斷是否存在環路,用Bellman-Ford和spfa都可以。
轉載于:https://www.cnblogs.com/Roni-i/p/9445634.html
總結
以上是生活随笔為你收集整理的如何判断图中存环(正负)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 截取控件为图片
- 下一篇: LeetCode 143. 重排链表(R