首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调整Floyd-Warshall算法检测循环

调整Floyd-Warshall算法检测循环
EN

Stack Overflow用户
提问于 2022-04-28 12:35:37
回答 1查看 114关注 0票数 2

干杯,我正试图解决有向图中最小长度循环的问题,我遇到了一个解决方案,它建议我应该调整Floyd算法来解决这个问题。它说,与其设置path[i][i] = 0,不如设置path[i][i] = INFINITY,但我不太明白为什么会这样!我发现弗洛伊德-沃尔使用的阵列的主对角线没有变化,所以它能帮助我看到循环的路径吗?据我所知,生成的数组的算法帮助我找到最短的路径对。path[i][j]给了我从i到j的最短路径,但是,虽然直觉保持不变,但我看到没有什么变化,我不能取得预期的结果。

我甚至尝试可视化这个过程,使用这个网站这里,我生成了一个包含许多循环的图形,但是虽然对角线是用无穷大来初始化的,但是它不会被改变。有人能解释我错过了什么或者我能做些什么来解决我的问题吗?

EN

回答 1

Stack Overflow用户

发布于 2022-04-28 15:20:42

在为动画站点编码Floyd算法的方式中有一个实现细节;它阻止您看到预期的结果。

下载源代码并查看Floyd.js,查看不应该存在的条件:

代码语言:javascript
复制
for (var k = 0; k < this.size; k++) {
    for (var i = 0; i < this.size; i++) {
        for (var j = 0; j < this.size; j++) {
            if (i != j && j != k && i != k) // <<== This is the problem
                ...

该算法从不通过第三个节点计算从节点到自身的路径(即i == j),因此它从不检测循环。从本质上说,该条件假设传递到自身不能得到改进,这在主对角线设置为INFINITY时是不正确的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72043824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档