扫雷算法

时间:2011-08-13 04:19:52

标签: algorithm minesweeper

我即将用Java设计我自己的扫雷。 在分析真正的Windows 7扫雷时,我遇到了这种情况。

1 or 0 ?

未覆盖的方块(箭头所示)可能是1或者可能没有任何数字(空方块)。 但是在Windows 7的扫雷中,这个方块有1个。

假设:通过分析,我发现所有的地雷总是被数字所包围。

如果我按照我的假设,那么没有其他的去,未覆盖的方格应该是1。

如果我遵循这个假设,那么为扫雷设计逻辑会更容易。 因为

步骤1:随机分配带有地雷的方块。(使2D数组中的特定(i,j)元素为-1)。

第2步:为每个方块编号,等于它周围的地雷数量。 (在这种情况下,假设成为现实)。

  

我的问题是,

     
      
  1. 如果露出的方格是空方格有什么问题?
  2.   
  3. 这个假设是否是扫雷的规则?
  4.   
  5. 我是否必须遵循这个假设,以使我的编码更简单   实施?
  6.   
  7. *如果我提出一个新的扫雷艇,反对该规则   假设,我的新扫雷艇最终会不稳定吗?是这样,怎么样?
  8.   

* - >我没有故意违反规则,我尝试删除用户的冗余提示/密钥。

3 个答案:

答案 0 :(得分:10)

当然,尖头的正方形有一个数字 - 它与(正好是一个)矿区相邻,所以它得到1.空的正方形只是零点。

答案 1 :(得分:6)

广场不能无编号,数字代表有多少地雷接触该广场。未编号的方块为“0”,表示没有地雷接触。

所以是的,一个地雷必须总是被编号的方块包围。

答案 2 :(得分:0)

你没有看到数字的原因是扫雷的填充算法 它显示所有具有0值的字段(0显示为空)。并且它揭示了之前显示的所有相邻字段,它们具有非零值 角落中的字段没有相邻的零值字段,因此无法自动显示。

它带有1。

如果您有一个10x11字段且最后一行为空,则此字段将显示为值1.

Windows版本显示一个版本的原因可能是您已经使用标记标记了所有现有的地雷,因此Windows Minesweeper会显示所有剩余的字段。