• 打开所有的灯


    题目背景

    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

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

    分析

    深搜即可
    .
    .
    .
    .
    .
    .

    程序:
    #include<iostream>
    using namespace std;
    int a[5][5],ans=0,mix=10;
    void dd(int x,int y)
    {
        a[x][y]=1-a[x][y];
        a[x+1][y]=1-a[x+1][y];
        a[x][y+1]=1-a[x][y+1];
        a[x-1][y]=1-a[x-1][y];
        a[x][y-1]=1-a[x][y-1];
    }
    void dfs(int k)
    {
        if (k>mix) return;
        int s=0;
        for(int i=1;i<=3;i++)
        for(int j=1;j<=3;j++)
        s+=a[i][j];
        if (s==9)
        {
            ans=k-1;
            if (ans<mix) mix=ans;
        }
        for(int i=1;i<=3;i++)
        for(int j=1;j<=3;j++)
        {
            dd(i,j);
            dfs(k+1);
            dd(i,j);
        }
        return;
    }
    int main()
    {
        for(int i=1;i<=3;i++)
        for(int j=1;j<=3;j++)
        cin>>a[i][j];
        dfs(1);
        cout<<mix;
    }
  • 相关阅读:
    $.ajax()方法详解
    关于JDK动态代理和cglib动态代理
    关于eclipse maven引入第三方jar包后如何下载源代码
    关于oracle中table函数的使用
    ORA-00257:archiver error错误维护记录
    oracle学习笔记服务启动
    oracle学习笔记之用户管理-3
    oracle学习笔记之用户管理-2
    oracle学习笔记之用户管理-1
    github 手记
  • 原文地址:https://www.cnblogs.com/YYC-0304/p/9499975.html
Copyright © 2020-2023  润新知