洛谷 P2040 打开所有的灯
2024-08-23 10:28:51
题目背景
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个整数,表示最少打开所有灯所需要的步数。
输入输出样例
说明
这个题水不水,就看你怎么考虑了。。。。
思路:看数据范围,n*n==9,所以如果搜索的话,时间复杂度为2^9可以跑过去。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int ans=0x7f7f7f7f;
bool map[][],vis[][];
bool judge(){
int bns=;
for(int i=;i<=;i++)
for(int j=;j<=;j++)
if(map[i][j]) bns++;
if(bns==) return true;
else return false;
}
void dfs(int sum){
if(judge()){
ans=min(ans,sum);
return ;
}
for(int i=;i<=;i++)
for(int j=;j<=;j++)
if(!vis[i][j]){
vis[i][j]=;map[i][j]=!map[i][j];
map[i-][j]=!map[i-][j];map[i][j-]=!map[i][j-];
map[i+][j]=!map[i+][j];map[i][j+]=!map[i][j+];
dfs(sum+);map[i][j]=!map[i][j];
map[i-][j]=!map[i-][j];map[i][j-]=!map[i][j-];
map[i+][j]=!map[i+][j];map[i][j+]=!map[i][j+];vis[i][j]=;
}
}
int main(){
for(int i=;i<=;i++)
for(int j=;j<=;j++)
scanf("%d",&map[i][j]);
dfs();
cout<<ans;
}
但是我们要谈就更优异的算法,我们知道,改变一盏偶数次,相当于没有改变,而改变基数词,相当于改变一次。所以这个题目可以转成二进制。
代码见这里。
最新文章
- iOS Version 和 Build 版本号
- 全文搜索 Lucene.Net
- PHP制作验证码
- Mysql 配置主从服务自动同步功能
- 【转】[Java] HashMap使用的示例
- C/C++修改常量的值
- 2017年4月 TIOBE 编程语言排名
- nginx+apache前后台搭配使用
- js面向对象的理解
- 修改或添加HTTP请求头
- (二叉树 递归) leetcode 106. Construct Binary Tree from Inorder and Postorder Traversal
- Node.js建立服务、路径处理与响应
- C# Note34: 异常机制相关小点
- Django中的ORM框架使用小技巧
- 2017-2018-2 20165220『Java程序设计』课程 结对编程练习_四则运算
- Spring-----配置及对象初始化(1)
- 这个代码给所有带有name属性的链接加了一个背景色
- VS2015 LINK : fatal error LNK1264: 已指定 /GENPROFILE 但没有所需的代码生成;检测失败
- 第一篇,编译生成libcef_dll_wrapper
- python随笔(三)
热门文章
- HDU 2078 选课时间( 水题 )
- [转载] Linux新手必看:浅谈如何学习linux
- Matplotlib 绘图与可视化 一些属性和错误
- ubuntu/wireshark --Lua: Error during loading: [string ";/usr/share/wireshark/init.lua";]:45问题解决
- Linux下MySql数据库常用操作
- servlet调用的几种方式
- RedHat6.5 安装OpenStack all in one-RDO方式
- Thrift源代码分析(七)-- TServerserver分析
- No connection could be made because the target machine actively refused it [::1]:808
- m_Orchestrate learning system---八、下拉列表(select标签)如何实现链接功能