是明星搜索所必需的开放和封闭列表。

时间:2017-11-07 14:10:49

标签: c# unity3d path-finding a-star

我正在尝试在Unity中使用星形搜索算法制作寻路系统。

我的问题是,是否可以在没有打开和关闭列表的情况下实现算法?

我的代码目前的工作方式如下:

  • 最初将当前节点设置为起始节点。
  • 搜索当前节点的相邻节点列表,返回f成本最低的节点(使用公式计算:f(n)= g(n)+ h(n)
  • 具有最低代码的节点设置为nodeToMoveToNext。
  • 当前节点设置为nodeToMoveToNext。 重复进程直到currentNode为targetNode。

此代码正常运行,我可以移动到目标目标,为什么我需要打开和关闭列表?

2 个答案:

答案 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将是。依此类推。