• P2040 打开所有的灯


    题目背景

    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个整数,表示最少打开所有灯所需要的步数。

    输入输出样例

    输入样例#1: 复制
    0  1  1
    1  0  0
    1  0  1
    输出样例#1: 复制
    2

    说明

    这个题水不水,就看你怎么考虑了。。。。

    思维好题???

    好题。。。

    正如题目所说。。。水不水就看怎么考虑了。

    首先输入完成后判断一下是不是全都为1,此时直接输出0就好了,也省去了往后麻烦的操作。

    dfs里面的变量是操作次数,为什么取9呢?。。。

    怎么解释呢。。。一个一个来,,9次也算很多了。。

    所以超过9次,,就返回上一步再来吧。

    然后我们正常操作,把是0的点和其周围四个点变成和原来不一样的,

    我这里是写的a[i][j]=!a[i][j],就是0,1取反,也可以用1减去a[i][j],得到的也是0,1取反.

    然后每操作一次,就判断一下,是不是全都为1了。

    然后如果还有点为0,那我们就继续操作,操作数+1,继续搜索、。。

    其实这是一个模拟的过程,就看你的模拟思路好不好了。。

    这个还比较好理解,代码:

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    
    int ans=2333;
    int a[4][4];
    int xx[]={-1,0,0,1},yy[]={0,-1,1,0};
    
    bool judge()
    {
    	for(int i=1;i<=3;++i)
    		for(int j=1;j<=3;++j)
    			if(!a[i][j]) return 0;
    	return 1;
    }
    
    void dfs(int x)
    {
    	if(x>9) return ;
    	for(int i=1;i<=3;++i)
    		for(int j=1;j<=3;++j)
    			if(!a[i][j])
    			{
    				a[i][j]=1;
    				for(int k=0;k<4;++k)
    				{
    					int dx=i+xx[k],dy=j+yy[k];
    					a[dx][dy]=!a[dx][dy];
    				}
    				if(judge()) 
    					ans=min(ans,x);
    				dfs(x+1);
    				a[i][j]=0;
    				for(int k=0;k<4;++k)
    				{
    					int dx=i+xx[k],dy=j+yy[k];
    					a[dx][dy]=!a[dx][dy];
    				}
    			}
    }
    
    int main()
    {
    	for(int i=1;i<=3;++i)
    		for(int j=1;j<=3;++j)
    			scanf("%d",&a[i][j]);
    	if(judge()) 
    	{
    		printf("0");
    		return 0;
    	}
    	dfs(1);
    	printf("%d",ans);
    	return 0;
    }

    如果你不开心,那我就把右边这个帅傻子分享给你吧,  

    你看,他这么好看,那么深情的望着你,你还伤心吗?  

    真的!这照片盯上他五秒钟就想笑了。  

    一切都会过去的。 

     

  • 相关阅读:
    wamp+phpzendstudio配置xdebug57%解决办法
    【linux学习问题解决】使用aptget安装软件出现unable to locate package的解决办法
    【linux LAMP平台安装】写在前面(一)
    【linux学习问题解决】更改字符界面大小(转)
    [phpcms二次开发]phpcms生成栏目出错,转到模版页面
    [phpcms二次开发]给url规则添加可用更多自定义可用变量
    [phpcms二次开发]实现获取路径linux与windows路径兼容
    控件注册 利用资源文件将dll、ocx打包进exe文件(转)
    C#串口通信:MSComm控件使用详解
    改善C#程序的建议1:非用ICloneable不可的理由
  • 原文地址:https://www.cnblogs.com/Mary-Sue/p/9681162.html
Copyright © 2020-2023  润新知