求助:如何生成扫雷棋盘所需的随机0/1矩阵?现有方法存缺陷
解决扫雷棋盘随机0/1生成的问题
看来你在生成扫雷棋盘的随机雷区时踩了个典型的坑——用?符号得到的是完全重复的交替01模式,换用roll又拿到了随机小数,确实让人头大!我来给你捋捋可行的解决思路:
为什么之前的方法不行?
- 你用的
?符号应该是某个工具/语法里的固定占位符,它生成的是预设的交替序列(0101...),并不是真正的随机数,所以会出现全重复的模式。 - 所谓的
roll如果返回的是0-1之间的随机小数,那只是没有做整数转换,只要加个判断或取整就能得到0/1。
- 你用的
通用解决方案:用真随机数生成器
不管你用什么编程语言,几乎都自带了生成随机整数的工具,这里举几个常见的例子:- Python 基础实现(随机0/1填充)
import random # 生成5x5的随机棋盘 board = [[random.randint(0, 1) for _ in range(5)] for _ in range(5)] # 打印结果 for row in board: print(' '.join(map(str, row)))- 更贴合扫雷逻辑:固定雷数生成
扫雷通常会固定雷的数量,而不是完全随机填充,这种方式更合理:
import random board_size = 5 total_mines = 5 # 初始化全0棋盘 board = [[0]*board_size for _ in range(board_size)] # 随机选不重复的位置放雷 mine_coords = random.sample([(x, y) for x in range(board_size) for y in range(board_size)], total_mines) for x, y in mine_coords: board[x][y] = 1 # 输出棋盘 for row in board: print(' '.join(map(str, row)))- 如果是用
roll类的小数随机工具
要是你只能用返回0-1小数的roll,可以加个判断转换:
# 假设roll()返回0到1之间的随机小数 def get_random_bit(): return 1 if roll() > 0.5 else 0 # 生成棋盘 board = [[get_random_bit() for _ in range(5)] for _ in range(5)]
核心就是避开那些生成固定模式的占位符,用语言/工具自带的真随机数生成函数,这样就能得到真正随机的0/1棋盘啦!
内容的提问来源于stack exchange,提问作者SollyBunny
相关产品推荐
相关产品推荐

