微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C++迷宫问题,如何去除重复?

如何解决C++迷宫问题,如何去除重复?

我试图使用回溯来解决众所周知的迷宫问题。 现在对于每个地方,我应该尝试朝 4 个不同的方向前进:

[i+1,j] [i-1,j] [i,j+1] [i,j-1]

不是重复我的代码 4 次来处理每个方向,在这种情况下我如何使用 for 循环?

如果我这样做:

for (int k=-1;k<2;k+=2)
{
    travel(i+k,j);
}

这不会涵盖所有情况。

解决方法

这可以通过一个简单的数学技巧来实现。

dst(x,y) = { maxvalue if src(x,y) > thresh src(x,y) otherwise } 需要恒定时,j变化i个单位,当1需要恒定时,i变化1个单位。

因此,只需检查要添加到 ji 的值的绝对值之和是否等于 j

1
,

您可以创建一个包含 4 个元素的数组,其中包含可能的组合:

#include <array>   // array
#include <utility> // pair

// ...

void foo() {
    static std::array<std::pair<int,int>,4> dir{
        {1,0},{-1,{0,1},-1}
    };

    // going through the 4 combinations
    for (auto[x,y] : dir) {
        travel(i + x,j + y);
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?