如何保证所有开放节点都是可遍历的

时间:2015-04-04 12:38:55

标签: algorithm graph-algorithm path-finding a-star

在一个项目中,我目前正在使用A *来寻找路径。我先放下我的经纪人。然后我将所有阻止程序放在任何可用的节点上。 代理需要能够访问任何开放节点。但是,可能会发生以下情况:

A = Agent
B = Node that's blocked
X = An open node that's impossible to reach

[A] [ ] [ ] [ ] [ ]
[ ] [ ] [ ] [ ] [ ]
[B] [B] [ ] [ ] [ ]
[X] [B] [ ] [ ] [ ]

以下是可以回答的问题,以避免这种情况(回答任何一个可以解决这个问题):

  1. 如何检测到X没有路径,然后以最佳方式修复它(或者至少是一种不可接受的方式,不需要为每个节点调用A *,然后随机选择不同的节点把其中一个阻塞器打开,直到最后所有节点都可以遍历)?
  2. 在放置拦截器时,我怎样才能确保他们不会让任何开放式节点无法到达?
  3. 我能想到的一种方法是放置所有阻挡物。然后我可以检查他们的邻居,看看是否有任何邻居节点是打开的,可以通过调用A *来遍历它们。这比我在问题1中解释可能的解决方案的方式至少要好一点。

1 个答案:

答案 0 :(得分:0)

有几种方法可以生成迷宫。最简单的一种是随机深度优先搜索(从起始单元开始,以随机顺序访问未访问的邻居,直到到达出口。所有未访问的单元被认为是墙)。它具有所有必需的属性(由于终止条件,出口始终可达,所有开放单元都可以从起始单元到达,因为它始终只生成一个连接的组件)。您可以在此处详细了解它(以及其他一些迷宫生成算法):http://en.m.wikipedia.org/wiki/Maze_generation_algorithm