算法基础之python实现枚举法中的熄灯问题
2018-03-09 16:39
459 查看
问题:对于一个5*6的按钮矩阵,每个按钮位置上都有一盏灯,当按下一个按钮时,该按钮及其周围位置(上、下、左、右)的灯都会改变一次对于一个固定的5*6的灯的初始状态,按下哪些按钮,可以使所有灯都熄灭。如下:
思路:按下第一行按钮后,对于第一行仍亮着的灯,由第二行按钮控制,以此类推,
第二行按下后,对于第二行仍亮着的灯,由第三行按钮控制,......,
第四行仍亮着的灯,由第五行按钮控制,最后判断第五行灯的亮灭状态,
若第五行全熄灭,则第一行按钮的方式正确,否则,换一种第一行按下的方式。
对于初始矩阵而言,第一行按下的方式有2^6中,需一一枚举。其中puzzle数组代表灯的亮灭状态,1代表亮,0代表灭;而press数组则代表按钮是否按下,1代表按下,0代表不按。
思路:按下第一行按钮后,对于第一行仍亮着的灯,由第二行按钮控制,以此类推,
第二行按下后,对于第二行仍亮着的灯,由第三行按钮控制,......,
第四行仍亮着的灯,由第五行按钮控制,最后判断第五行灯的亮灭状态,
若第五行全熄灭,则第一行按钮的方式正确,否则,换一种第一行按下的方式。
对于初始矩阵而言,第一行按下的方式有2^6中,需一一枚举。其中puzzle数组代表灯的亮灭状态,1代表亮,0代表灭;而press数组则代表按钮是否按下,1代表按下,0代表不按。
import numpy as np line=[[0]*6]*5 for 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中的最上面加入一行0 puzzle=np.insert(puzzle,0,values=zero,axis=0) #向puzzle中的最后一列加入一列0 puzzle=np.insert(puzzle,6,values=zero,axis=1) #向puzzle中的第0列加入一行0 puzzle=np.insert(puzzle,0,values=zero,axis=1) b=[[0 for col in range(8)] for row in range(6)] # 6*8 不要写反 press=np.array(b) # 或 press=np.zeros((6,8)) def guess(): for r in range(1,5): for c in range(1,7): #根据press的第一行和puzzle的第一行,确定press其他行的值 pres 4000 s[r+1][c]=(puzzle[r][c]+press[r][c]+press[r-1][c]+press[r][c-1]+press[r][c+1]) % 2 #判断所计算的press能否熄灭最后一行的所有灯 for c in range(1,7): if (press[5][c-1]+press[5][c]+press[5][c+1]+press[4][c])%2!=puzzle[5][c]: return 0 return 1 #枚举第一行按下开关的所有可能性,有2^6个 def 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 continue enumeration() print("灯的初始状态:\n",puzzle[1:6,1:7]) print("按下结果为:\n",press[1:6,1:7])
相关文章推荐
- 算法基础之python实现枚举法中的讨厌的青蛙的问题
- 算法基础之python实现深度优先搜索中城堡问题
- 算法基础之python实现贪心算法中圣诞老人分糖果问题和二分查找算法中烘干衣服问题
- 算法基础之python实现贪心算法中的雷达安装问题和二分法中誊抄书籍问题
- 算法基础之python实现深度优先搜索的数独问题
- 算法基础之python实现递归法中棋盘分割问题
- 算法基础之python实现动态规划中数字三角形和最长上升子序列问题
- 算法基础:整数拆分问题(Golang实现)
- 分组Top N问题(一) - java实现Top n算法基础
- python实现基础排序算法之(插入排序)
- <基础原理进阶>机器学习算法python实现【1】--分类简谈&KNN算法
- 算法基础:排序(一)——选择排序、插入排序、Shell排序——Python实现
- 枚举-熄灯问题(算法基础 第2周)
- 算法基础:排序(一)——选择排序、插入排序、Shell排序——Python实现
- Python 算法基础 排序实现
- 算法与数据结构基础系列(一): 链表的常见问题分析及实现
- 算法基础:排列组合问题-全排列(Golang实现)
- 《机器学习实战》——k-近邻算法Python实现问题记录
- python实现基础排序算法之(冒泡排序)
- python实现KNN算法中遇到的问题