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

Algorithm 如何保证所有打开的节点都是可遍历的,algorithm,graph-algorithm,path-finding,a-star,Algorithm,Graph Algorithm,Path Finding,A Star,在一个项目中,我目前正在使用*来查找路径。我先放下我的经纪人。然后,我将所有阻塞器放置在任何空闲的节点上代理需要能够访问任何打开的节点。但是,可能会发生以下情况: A = Agent B = Node that's blocked X = An open node that's impossible to reach [A] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [B] [B] [ ] [ ] [ ] [X] [B] [ ] [ ] [ ] 以下是可以回答的

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

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

[A] [ ] [ ] [ ] [ ]
[ ] [ ] [ ] [ ] [ ]
[B] [B] [ ] [ ] [ ]
[X] [B] [ ] [ ] [ ]
以下是可以回答的问题,以避免出现这种情况(回答任何一个问题都可以解决此问题):

  • 我怎样才能检测到X没有路径,然后以最好的方式修复它(或者至少是一种可以接受的方式,它不需要对每个节点调用*然后随机选择一个不同的节点来放置一个拦截器,直到最后所有节点都可以通过)
  • 在放置拦截器时,如何确保它们不会使任何打开的节点无法到达

  • 我能想到的一个方法是放置所有的拦截器。然后我可以检查它们的邻居,看看是否有任何邻居节点是开放的,并且可以通过调用*来遍历它们。这至少比我在问题1中解释可能解决方案的方式好一点。

    生成迷宫有几种方法。最简单的方法是随机深度优先搜索(从起始单元格开始,随机访问未访问的邻居,直到到达出口。所有未访问的单元格都被视为墙)。它具有所有必需的属性(出口由于其终止条件始终是可访问的,所有打开的单元格都可以从开始单元格访问,因为它始终只生成一个连接的组件)。你可以在这里阅读更多关于它的内容(以及一些其他迷宫生成算法):.

    你有任何放置块的特定规则,还是只需要生成一个满足所有提到的属性的随机迷宫?我没有放置块的特定规则。现在,它们被随机放置在任何打开的节点上。然而,也许我应该有放置它们的规则?制定放置它们的规则实际上可以回答问题2,但我不知道规则是什么。我唯一需要满足的不动产是代理必须能够访问任何打开的节点。我想让您知道,我仍在实施您的建议。一旦我成功了,我会接受你的回答!我最终使用了递归回溯算法(我没有尝试任何其他算法,因为这一个看起来最简单)。