在扫雷中搜索空单元的算法

时间:2009-10-28 07:25:59

标签: algorithm

我正在创建扫雷并且想知道当用户按下空单元格然后生长并限制到边界直到它到达炸弹单元时,搜索所有空单元格的最佳算法是什么。我打算使用递归搜索,但可能会减慢这个过程。

感谢。

3 个答案:

答案 0 :(得分:4)

如果你以图形方式描绘检测,我会说最好是多步骤(按照你的建议扩大边界):

  1. 显示点击的广场,查找明显处理的所有附近条目。
  2. 显示这些方块,查找明显处理的所有条目。
  3. 从第2步开始重复。
  4. 这样,用户可以看到它总是好的发生。混合一些动画,它可能是一种很酷的东西,让人有希望它发生。

答案 1 :(得分:3)

Epsilon Prime的解决方案是实现它的好方法。

您可以使用队列来执行此操作。

示例:

push the first empty cell/point
LOOP until queue non empty 
   pop.head cell and reveal it
   push the empty surrounding cells of it (8 at maximum)
     (you must flag the cells so you don't push them again,  
      ie dont push the cells that are already revealed)

答案 2 :(得分:2)

从算法的角度来看,Breadth-First SearchDepth-First Search不会出错。 Nick D's answer基本上描述了广度优先搜索,但总的来说,你想要的解决方案是“当你仍然看着正方形,显示正方形;如果广场没有炸弹邻居,那么每个尚未访问的八个邻居,将其标记为已访问并将其添加到您正在查看的正方形列表中。重复一遍,直到您正在查看的方块列表为空,并从用户点击的方块开始。