ZWJ962001 2023-06-27 10:35 采纳率: 60%
浏览 6
已结题

关于#c++#的问题:在算法SPFA中,数组“cnt”用于判断负环,通常写为“if(cnt[v]>n)”n是图中的顶点编号

在算法SPFA中,数组“cnt”用于判断负环

img


,通常写为“if(cnt[v]>n)”n是图中的顶点编号。我认为它是否可以写成“if(cnt[v]>=n)”?根据没有负循环的图,单元路径的边数等于顶点数减一(不知道是不是公理)。只是一个小问题。
谢谢大老们

  • 写回答

1条回答 默认 最新

  • 憧憬blog 2023-06-27 10:54
    关注

    当没有负环时,从任意一个顶点出发到其余所有顶点的单源最短路径的边数不会超过n-1。因此,如果算法运行到某个节点v时,cnt[v]的值已经大于等于n,那么说明从起点到v的路径上必定存在环,且该环中至少包含n条边,即存在负环。

    因此,将判断条件从“if(cnt[v]>n)”改为“if(cnt[v]>=n)”是正确的,并不影响算法的正确性。这样修改后,如果存在负环,算法会在第n次松弛操作时就返回true,而不是等到第n+1次松弛操作才返回。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 7月6日
  • 已采纳回答 6月28日
  • 创建了问题 6月27日

悬赏问题

  • ¥15 C++显示超限兔子集结
  • ¥15 sql server 2012的下载出错
  • ¥15 图像识别用户软件开发
  • ¥20 类原生rom lineageos
  • ¥15 有没有会做中专,云计算,卷子的,有偿一百块
  • ¥15 HC32串口DMA循环发送数据
  • ¥15 Uni-App实现飞书授权登陆
  • ¥50 Qt应用中如何通过代码打开开发者工具devtools
  • ¥20 mpp硬解码h264转为yuv
  • ¥40 怎样批量对比两个数据库的表差异