在我的一个简单项目中使用时,我遇到了一些封锁。
我在网格中有一系列点,“墙”和“开放空间”。网格外的空间被认为是墙壁。我在这个网格中有一个任意数量的点是打开的,如果我在网格中使一个特定的块从开放空间变为墙壁,我必须确定连接的是否会改变。
这样做的有效方法是什么?
Example http://img718.imageshack.us/img718/9044/gridl.jpg
示例:如果绿色方块是墙或开放空间,确定红色方块之间路径的存在/不存在是否会改变。 (PS:我真诚地为我可怕的网格道歉)
现在,我假设某种细胞自动机是最好的,但我不确定。我之前看过寻路,但从未真正看到任何陷入此类问题的东西。
请注意:我不在乎路径有多长,(我知道它们的最大长度)它们必须存在。因此,没有必要找到点之间的最佳路径。
哦,虽然没关系,但我用Java编写这个项目,但任何语言(或伪代码)或算法的英文描述都足够了。 (我知道大多数Curly Bracket语言,有限的Haskell和LISP,他们都会这样做。)
答案 0 :(得分:1)
这可能不是最佳解决方案,但解决方案如下:
以这种方式检查所有节点是相当有效的(我认为检查n * n / 2-n / 2路径将花费O(n ^ 2)),但如果只是必要的话,添加新墙可能会更有效率岛屿是在没有洪水填充的情况下创建的,但这可能更难以实施。