您当前的位置:首页 > 电脑百科 > 程序开发 > 算法

Python算法之熄灯问题

时间:2022-05-11 10:18:54  来源:今日头条  作者:小汪学python

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

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

Python算法之熄灯问题

 

代码:

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)]
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 1


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", 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]]


Tags:Python算法   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
问题:汉诺塔游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作...【详细内容】
2022-06-22  Tags: Python算法  点击:(21)  评论:(0)  加入收藏
问题:有一个5X6的灯矩阵,灯按一下就亮,再按一下就熄灭。现在有这样一种情况,在这个矩阵中任意按下一盏灯它本身以及它的上、下、左、右四个位置的灯的状态也会随之改变。例如:...【详细内容】
2022-05-11  Tags: Python算法  点击:(60)  评论:(0)  加入收藏
贪心算法概述贪心算法(又称贪婪算法),基本原理是,遵循某种既定原则,不断地选取当前条件下最优的选择来构造每一个子步骤,直到获得问题最终的求解。即在求解时,总是作出当前看来最好...【详细内容】
2022-04-22  Tags: Python算法  点击:(80)  评论:(0)  加入收藏
在实现算法的时候,通常会从两方面考虑算法的复杂度,即时间复杂度和空间复杂度。顾名思义,时间复杂度用于度量算法的计算工作量,空间复杂度用于度量算法占用的内存空间。本文将从...【详细内容】
2019-11-18  Tags: Python算法  点击:(187)  评论:(0)  加入收藏
▌简易百科推荐
背景对抗是反作弊永恒的主旋律,面对对抗我们需要做到快速响应、见招拆招、在变化中发现不变的本质。在反作弊场景中,黑产必须通过文本进行信息传递或触达受害者,而文本由于其生...【详细内容】
2022-07-14  字节跳动技术团队    Tags:算法   点击:(4)  评论:(0)  加入收藏
请实现一个函数用来匹配包含'. '和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(含0次)。在本题...【详细内容】
2022-07-13  做架构师不做框架师    Tags:正则表达式   点击:(6)  评论:(0)  加入收藏
高手:滑动窗口是一种比较常用的数据统计算法。简单来说,就是在一个大的数组上,定义一个固定长度的滑动窗口,然后这个窗口在数组上进行滑动。在窗口滑动的过程中,左边会出一个元素...【详细内容】
2022-07-13  跟着Mic学架构    Tags:算法   点击:(8)  评论:(0)  加入收藏
一、希尔排序介绍希尔排序这个名字,来源于它的发明者希尔,也称作“缩小增量排序”,是插入排序的一种更高效的改进版本。希尔排序是基于插入排序的以下两点性质而提出改进方法的...【详细内容】
2022-07-08  程序猿星球    Tags:希尔排序   点击:(14)  评论:(0)  加入收藏
描述为了保证第三方应用与API服务器之间通信的安全性,防止Secret Key盗用、数据篡改等恶意攻击行为,开放平台API 服务器使用签名机制,应用在调用开放平台API,需要计算出一个签...【详细内容】
2022-07-08  零一间    Tags:算法   点击:(9)  评论:(0)  加入收藏
6. 蒙特卡洛算法6.1 计算π" role="presentation" style="display: inline; font-style: normal; font-weight: normal; text-indent: 0px; text-align: left; text-trans...【详细内容】
2022-07-08  海椰人  博客园  Tags:算法   点击:(17)  评论:(0)  加入收藏
数学统计在我们的程序当中特别是数据分析当中是必不可少的一部分,本文就来介绍一下 NumPy 常见的统计函数。最大值与最小值numpy.amin()用于计算数组中的元素沿指定轴的最小...【详细内容】
2022-07-07  VT漫步    Tags:统计函数   点击:(15)  评论:(0)  加入收藏
一、基础概念1、Sorted(单调递增or单调递减)2、Bounded(存在上下界)3、Accessible by index(能够通过索引访问,数组适合,but链表不适合)二分查找是一种在每次比较之后将查找空间一...【详细内容】
2022-07-04  程序猿星球    Tags:算法   点击:(14)  评论:(0)  加入收藏
分布式系统的模型为了更容易理解分布式系统,我们先来构建一个模型。 武当派因为人口增长变成 11 个办事处分散在地图各地; 办事处之间的通信只能依靠信鸽; 一只信鸽可能无法完...【详细内容】
2022-07-01  算法的秘密    Tags:共识算法   点击:(20)  评论:(0)  加入收藏
在本课程中, 您将 详细、逐步地解释经典的精选 LeetCode 问题 ,您将了解解决技术编码面试问题的最佳方法。 这是我在准备面试时希望参加的课程。课程英文名:LeetCode in Java A...【详细内容】
2022-06-30  IT教程精选    Tags:LeetCode   点击:(19)  评论:(0)  加入收藏
站内最新
站内热门
站内头条