zoukankan      html  css  js  c++  java
  • 打开所有的灯

    题目背景

    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;
    }
  • 相关阅读:
    abs() 与fabs() 的区别辨析
    TCP服务端如何判断客户端断开连接学习
    数据结构与算法李春葆 第二章思维导图
    数据结构与算法思维导图第一章
    关于临时表的操作
    关于 ANSI_NULLS和QUOTED_IDENTIFIER
    临时表和视图的区别
    关于CancellationToken的解释
    在项目中添加signalr.js
    数据库存储过程的写法
  • 原文地址:https://www.cnblogs.com/YYC-0304/p/9499975.html
Copyright © 2011-2022 走看看