题目背景

pmshz在玩一个益(ruo)智(zhi)的小游戏,目的是打开九盏灯所有的灯,这样的游戏难倒了pmshz。。。

题目描述

这个灯很奇(fan)怪(ren),点一下就会将这个灯和其周围四盏灯的开关状态全部改变。现在你的任务就是就是告诉pmshz要全部打开这些灯。

例如:

0 1 1

1 0 0

1 0 1

点一下最中间的灯 \([2,2]\) 就变成了

0 0 1

0 1 1

1 1 1

再点一下左上角的灯 \([1,1]\) 就变成了

1 1 1

1 1 1

1 1 1

达成目标。最少需要 \(2\) 步。

输出 \(2\) 即可。

输入格式

九个数字,\(3*3\) 的格式输入,每两个数字中间只有一个空格,表示灯初始的开关状态。( \(0\) 表示关,\(1\) 表示开)

输出格式

一个整数,表示最少打开所有灯所需要的步数。

输入输出样例

输入 #1

0 1 1

1 0 0

1 0 1

输出 #1

2

——————————————————————————————————————

想了一会没有什么特别好的方法,所以直接搜索了,时间很充裕~

用二进制数表示九盏灯的开关状态,\(2^9 = 512\) 状态数允许完全被记录。

用 \(way\) 数组储存按下某栈灯时候会发生变化的灯的编号。

之后就是常规的广搜,\(vis\) 数组记录压缩后的每种状态实现需要的最少操作数。

代码如下:

#include <bits/stdc++.h>
#define MAX 666
using namespace std;
int init,vis[MAX];
int way[9][9]={{1,3,-1},{0,2,4,-1},{1,5,-1},
{0,4,6,-1},{1,3,5,7,-1},{2,4,8,-1},
{3,7,-1},{4,6,8,-1},{5,7,-1}};
queue<int> Q;
inline int read() {
int X=0,w=0; char ch=0;
while (!isdigit(ch)) w|=ch=='-',ch=getchar();
while (isdigit(ch)) X=(X<<3)+(X<<1)+(ch^48),ch=getchar();
return w?-X:X;
}
inline int open(int x,int opt) {
int pos=0;
while (way[opt][pos]!=-1) x^=(1<<way[opt][pos++]);
return x^=(1<<opt);
} int main() {
memset(vis,-1,sizeof(vis));
for (int i=1;i<=9;i++) init<<=1,init+=read();
Q.push(init),vis[init]=0;
while (!Q.empty()) {
int now=Q.front(); Q.pop();
for (int i=0;i<9;i++) {
int tmp=open(now,i);
if (vis[tmp]==-1) vis[tmp]=vis[now]+1,Q.push(tmp);
}
}
printf("%d",vis[(1<<9)-1]);
return 0;
}

Luogu2040 | 打开所有的灯 (广搜+状压)的更多相关文章

  1. [noip模拟]食物中毒<暴搜+状压优化>

    问题描述 Bqc经过一段时间的研究发现,要解这种毒需要一种特殊的药物.不幸的是,这种药物在 市面上不存在,没有办法Bqc只好亲自制得这种药物.它含有M种化学物质A1,A2,…,AM.现 在Bqc的手上 ...

  2. 中南大学oj:1336: Interesting Calculator(广搜经典题目)

    http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1336 There is an interesting calculator. It has 3 r ...

  3. PAT L3-008 喊山(广搜)

    喊山,是人双手围在嘴边成喇叭状,对着远方高山发出“喂—喂喂—喂喂喂……”的呼唤.呼唤声通过空气的传递,回荡于深谷之间,传送到人们耳中,发出约定俗成的“讯号”,达到声讯传递交流的目的.原来它是彝族先民用 ...

  4. HDU 1010 Tempter of the Bone (广搜+减枝)

    题目链接 Problem Description The doggie found a bone in an ancient maze, which fascinated him a lot. How ...

  5. HDU-1226-超级密码-队列+广搜+大数取模

    Ignatius花了一个星期的时间终于找到了传说中的宝藏,宝藏被放在一个房间里,房间的门用密码锁起来了,在门旁边的墙上有一些关于密码的提示信息: 密码是一个C进制的数,并且只能由给定的M个数字构成,同 ...

  6. PIGS POJ - 1149网络流(最短增广路---广搜) + 建图

    题意: 第一行输入m和n,m是猪圈的数量,n是顾客的数量,下面n行 第 i+1行表示第i个顾客 , 输入第一个数字表示有几把猪圈的钥匙,后面输入对应的猪圈,最后一个数字输入顾客想买几头猪. 建图: 设 ...

  7. HDU--杭电--1195--Open the Lock--深搜--都用双向广搜,弱爆了,看题了没?语文没过关吧?暴力深搜难道我会害羞?

    这个题我看了,都是推荐的神马双向广搜,难道这个深搜你们都木有发现?还是特意留个机会给我装逼? Open the Lock Time Limit: 2000/1000 MS (Java/Others)  ...

  8. HDU 5652(二分+广搜)

    题目链接:http://acm.hust.edu.cn/vjudge/contest/128683#problem/E 题目大意:给定一只含有0和1的地图,0代表可以走的格子,1代表不能走的格 子.之 ...

  9. nyoj 613 免费馅饼 广搜

    免费馅饼 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼.说来gameboy ...

随机推荐

  1. 暑假第二周总结(在centos系统中安装eclipse出错,改为安装ubantu)

    本周试着在centos6.4系统上安装eclipse,在林子雨老师的教程所给的链接无法下载,后来找了许多的教程,即便是从官网下载之后,即便是安装好之后eclipse都无法正常启动,后来翻阅借阅的图书后 ...

  2. python学习Day03

    [主要内容] 1. 编码 1. 最早的计算机编码是ASCII. 美国人创建的. 包含了英文字母(大写字母, 小写字母). 数字, 标点等特殊字符!@#$% 128个码位 2**7 在此基础上加了一位 ...

  3. LeetCode 677. Map Sum Pairs 键值映射(C++/Java)

    题目: Implement a MapSum class with insert, and sum methods. For the method insert, you'll be given a ...

  4. RabbitMQ下载与安装

    RabbitMQ下载与安装 先跟大家科普一下MQ和RabbitMQ MQ简介 MQ全称为Message Queue ,即消息队列 应用场景: 1.任务异步处理. 将不需要同步处理的并且耗时长的操作由消 ...

  5. Codeforces_807

    A. 严格按照题目给的两个条件来. #include<bits/stdc++.h> using namespace std; ],b[]; int main() { ios::sync_w ...

  6. 【人类观察所】"当代人"正经历的生活

    一."即时满足"的互联网 "轻微烦躁,偶尔自燃,当代生活多数时刻的心情基调." 如果你出生于上个世纪,应该能明白木心的<从前慢>里的 「从前的日色变 ...

  7. 达梦数据库-RAC-DMDSC部署的关键点

    达梦数据库-RAC-DMDSC部署的关键点 环境准备 网络准备(ip地址分配).共享磁盘准备和挂载 ifconfig enp0s8 10.1.2.101;ifconfig enp0s9 192.168 ...

  8. k8s系列---hpa扩容

    centos-master:172.16.100.60 centos-minion:172.16.100.62 k8s,etcd,docker等都是采用yum装的,部署参考的k8s权威指南和一个视频, ...

  9. CentOS7下部署rsync服务

    说明: 在CentOS7下部署rsync服务和在CentOS6上部署基本上是一样的,只是CentOS7自带了rsyncd启动脚本,由systemd管理而已. rsync服务端配置 [root@SERV ...

  10. 国内jenkins搭建不再龟速的方式

    最新国内jenkisn搭建过程 第一步下载jenkins 点击进入清华源jenkins下载地址,我们下载的是jenkins-2.204.2.zip版本 之后解压后安装. 第二步配置管理员密码 自动弹出 ...