分享|玩扫雷,发现算概率并不简单
1446
2024.07.29
2024.07.29
发布于 广东

先上需求

输入一个扫雷游戏的当前局面,包括

  • r
  • c
  • 二维数组 data,如
    17222218836075.png
[[-9, -9, -9],
 [-9,  5,  3],
 [-9, -9, -9]]

其中 0-8 表示当前格子周围雷的数量,-9 表示未翻开的格子

输出一个二维数组表示未翻开格子是雷的概率,精度没要求,毕竟不是刷题
17222218116804.png

[[0.666667, 0.75, 0.75],
 [0.666667,    0,    0],
 [0.666667, 0.75, 0.75]]

样例2:
17222213401764.png

样例3:
17222215382380.png


下面是我自己的一些解决思路

  1. 划分互不影响的区域,这里我简单的取了连通区域
    17222229783567.png
  2. 如果一个翻开格子的数字,和周围未翻开的格子数量相同,那么未翻开的全部标记为雷
    17222233412657.png
  3. 剩下未确定的格子,每个格子有 2 种可能,雷或者安全,暴力穷举所有符合条件的雷的排列,某一格的概率就是出现次数在总次数中的占比
    36f6b452d68fbe02f0d1a71a904ea110_compress.jpg

未解决问题

  1. 划分区域是否存在更好的划分方式?
    观察样例 3 的右下角,这两个 50% 其实可以作为独立部分,但我不知道能不能,和怎么拆分
    17222237944575.png
  2. 暴力穷举的时间复杂度是 , 实际上走个二三十步就会因为计算量太大而卡死,如何优化这部分
  3. 其实上面只算了数字格附近的概率,剩下的空白区域概率还要根据总雷数计算,不过先不考虑了
评论 (7)