我正在尝试在Unity中使用星形搜索算法制作寻路系统。
我的问题是,是否可以在没有打开和关闭列表的情况下实现算法?
我的代码目前的工作方式如下:
此代码正常运行,我可以移动到目标目标,为什么我需要打开和关闭列表?
答案 0 :(得分:1)
关闭列表可用于确保您不检查同一节点两次(并再次退回)。这取决于您如何设置Node结构。假设您定义了"邻居"节点上方,下方,左侧和右侧的节点。
Node1有邻居:
节点2(f = 2),节点3(f = 10),节点4(f = 15)和节点5(f = 20)。
所以你步入Node2。
- > Node2具有以下邻居:
Node5(f = 20),Node6(f = 24),Node7(f = 30)和Node1(f = 2)
=>你回到Node1并一遍又一遍地做同样的事。
所以它几乎取决于你如何为你的案例定义它。您还可以在每个节点上使用bool,例如它已经被评估过。
您可能想要检查
https://en.wikipedia.org/wiki/A * _ search_algorithm
和"备注"请注意伪代码。
答案 1 :(得分:1)
此处不需要列表,因为您不使用星型搜索算法。
至于移动到目标目标的能力,在我看来,你的代码不处理一个简单的障碍(点,1和2是空节点,S是开始,G是目标,星是墙):
...S...
..*1*..
..*2*..
..***..
...G...
如果仅针对当前节点的相邻节点,则直接进入死胡同并永远保持在那里上下移动。当您处于位置1时,2将是具有最低代码的节点。当你在2,1将是。依此类推。