打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Python算法之熄灯问题

问题:有一个5X6的灯矩阵,灯按一下就亮,再按一下就熄灭。现在有这样一种情况,在这个矩阵中任意按下一盏灯它本身以及它的上、下、左、右四个位置的灯的状态也会随之改变。

例如:红色表示灯亮,白色表示灯熄灭。假设在开始时,所有的灯都是亮的,当我们按下(1,1)位置的灯,灯的状态会发生如下图变化;当我们又按下(2,5)位置的灯后,它附近的会发生如下图的变化。

代码:

import numpy as npline = [[0] * 6] * 5for i in range(5): line[i] = input('请输入第' + str(i) + '行:').split(',') # 将line中的元素转为整型 line[i] = list(map(int, line[i]))puzzle = np.array(line)zero = np.zeros(6)# 在puzzle的最上面加入一行0puzzle = np.insert(puzzle, 0, values=zero, axis=0)# 在puzzle的最后一列加入一列0puzzle = np.insert(puzzle, 6, values=zero, axis=1)# 在puzzle的第0列加入一行0puzzle = np.insert(puzzle, 0, values=zero, axis=1)b = [[0 for col in range(8)] for row in range(6)]press = np.array(b)def guess(): for r in range(1, 5): for c in range(1, 7): press[r + 1][c] = (puzzle[r][c] + press[r][c] + press[r - 1][c] + press[r][c - 1] + press[r][c + 1]) % 2 for c in range(1, 7): if (press[5][c - 1] + puzzle[5][c] + press[5][c + 1] + press[4][c]) % 2 != puzzle[5][c]: return 0 return 1def enumeration(): while guess() == 0: press[1][1] += 1 c = 1 while (press[1][c] > 1): press[1][c] = 0 c += 1 press[1][c] += 1 continueenumeration()print('灯的初始状态:\n', puzzle[1:6, 1:7])print('按下结果为:\n', puzzle[1:6, 1:7])

运行结果:

请输入第0行:1,1,0,0,1,1请输入第1行:0,1,0,0,1,0请输入第2行:1,1,1,0,0,0请输入第3行:1,0,1,1,0,1请输入第4行:0,0,0,1,1,1灯的初始状态: [[1 1 0 0 1 1] [0 1 0 0 1 0] [1 1 1 0 0 0] [1 0 1 1 0 1] [0 0 0 1 1 1]]按下结果为: [[1 1 0 0 1 1] [0 1 0 0 1 0] [1 1 1 0 0 0] [1 0 1 1 0 1] [0 0 0 1 1 1]]
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
给numpy矩阵添加一行或一列
Numpy insert函数
D02 Numpy常用函数,如何优雅的遍历一个多维数组?
matplotlib-绘制精美的图表
我分析了世界30年自杀数据,男人自杀是女人的4倍
一个交互式可视化Python库——Bokeh
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服