UVA - 10318 Security Panel dfs+剪枝

题目大意:给出一个n*m的格子,每个格子上都有一个按钮和一盏灯。 按钮按下后,它旁边的灯的状态就会变化。 灯的变化由所给的3*3的九宫格表示。 按下一个按钮后,九宫格的中心点就代表该点,然后将九宫格嵌套到该方格,九宫格的相应位置对应该n*m列表的相应格子,比如九宫格中心点的左边点对应该点的左边的第一个点。 然后*代表灯的状态变为相反状态解题思路: 同一个点按下两次就相当于抵消了,按点的顺序
摘要由CSDN通过智能技术生成

题目大意:给出一个n*m的格子,每个格子上都有一个按钮和一盏灯。
按钮按下后,它旁边的灯的状态就会变化。
灯的变化由所给的3*3的九宫格表示。
按下一个按钮后,九宫格的中心点就代表该点,然后将九宫格嵌套到该方格,九宫格的相应位置对应该n*m列表的相应格子,比如九宫格中心点的左边点对应该点的左边的第一个点。
然后*代表灯的状态变为相反状态

解题思路:
同一个点按下两次就相当于抵消了,按点的顺序是无关的,所以从小到大开始枚举。
纪录下按下每个点后这n*m格子会发生的变化,然后亦或一下就相当于按下了该点了。
暴力dfs + 剪枝,这是一个大剪枝
当你扫描的行,假设为n,上面还存在两行时,也就是n - 2 >= 0,因为当前的行只能改变到上面的行和下面的行的灯的状态,所以如果上面n - 2上面的行还有灯没亮的话,就表示永远不会亮了,return 掉

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<algorithm>
#include<queue>
#include<set>
using namespace std;
#define maxn 30
#define INF 0x3f3f3f3f
int r, c;
char str[5][5];
int change[30], vis[30
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值