c – 基于堆栈的迷宫算法背后的逻辑
作者:互联网
我是C编程的新手,我正在研究一种迷宫求解算法.我需要使用显式堆栈来跟踪完成的移动,没有递归.
基本上我负责“解算器”算法,我可以查看移动是否可用或阻止并执行此操作,或者我可以撤消移动.这些动作是左,右和前进.已经有代码负责绘制和更新迷宫.
我可以使用的只是帮助理解穿越迷宫的基本算法.我已经看了很多不同的程序,但我似乎无法弄明白.我正在解决的迷宫是随机生成的,没有循环.
这是我无法理解的事情:说我有一段直的墙,但也有一个分支从墙上出来.说我决定离开这个分支,但最终导致死路一条.我把我所做的所有动作都推到了堆栈上.基本上,我怎么知道我需要从堆栈中弹出多少动作才能知道我回到原来的交叉点,所以我可以拿另一个分支而不是阻塞的分支?
谢谢你的帮助!
解决方法:
Here is what I can’t wrap my mind around: Say I decide to go down this other branch, but eventually it leads to a dead end. I’ve pushed all the moves I’ve done onto the stack. Basically, how do I know how many moves I need to pop off the stack to know I’m back at the original junction, so I can take the other branch instead of the blocked one?
您需要做的就是始终按预定义的顺序进行选择.
The moves are left, right and forward.
如果你总是按照这个顺序做出这些选择,那么当你回溯时,你就会知道你已经做了什么.
您回溯的每一步,再次检查这些动作.如果你正在撤销一个正确的选择,你会知道你已经尝试过左右,但还没有尝试过.
标签:depth-first-search,c,algorithm,maze 来源: https://codeday.me/bug/20190725/1534753.html