gpt4 book ai didi

c# - 带移动约束的网格探索算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:44:09 25 4
gpt4 key购买 nike

最近我一直在研究“探索网格”的算法。我想根据可以位于网格上任何位置的起始方 block 绘制在网格的特定部分内有效的所有移动。我最初的计划是在标记网格的 4 个方向上使用递归拆分,直到它到达边界或移动限制。探索的“分支”不能沿对角线移动:

*注意:箭头不代表堆栈中的出现,它们用于可视化算法的概念

enter image description here

private void Explore(byte moves, byte row, char col) {
if (row >= Grid[0].Count || col >= Grid.Count || row + col + 2 > moves) {//var < 0 handled b/c byte b = 0; (byte)(b-1) == 255
return;
}
Grid[row][col].color = ...;//mark it

if (Grid[row + 1][col + 1] == notVisited) Explore((byte) (moves - 1), (byte)(row + 1), (char) (col + 1));
if (Grid[row - 1][col + 1]== notVisited) Explore((byte)(moves - 1), (byte)(row - 1), (char) (col + 1));
if (Grid[row - 1][col - 1] == notVisited) Explore((byte)(moves - 1), (byte)(row - 1), (char) (col - 1));
if (Grid[row + 1][col - 1] == notVisited) Explore((byte)(moves - 1), (byte)(row + 1), (char) (col - 1));
}

我知道这个算法不起作用 b/c 我做了一个快速可运行的示例 here算法卡在值之间,直到触发运行时错误。

所以此时:

  1. 递归是否仍然可行(切换到迭代)?

  2. 这个问题有更好的替代算法吗?

  3. 我的算法是否接近,但需要一些调整?

最佳答案

您似乎希望实现 depth-first search . wiki 文章甚至提供了一些伪代码,您可以使用这些伪代码来实现该算法。

请注意,这将标记所有可到达的方 block ,但不会打印出所有(冗余)移动,除非您修改算法。

关于c# - 带移动约束的网格探索算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30472908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com