费解的开关笔记

简介: 费解的开关笔记

// 卡壳,括号处理出问题了,这里的括号把下面的部分全包住了;打代码慢一点,稳住细节,debug的时候也要检查一下括号问题(毕竟比较容易检查,可以优先检查)

// 根据操作判断是开关问题,然后影响上下左右中的开关操作的做法是枚举最开始的一行的操作,然后递推,最后验证
//  还要看输入与范围,输入没有空格,要用char,范围500,非常安全可以dp,floyd,n^3,dfs剪枝
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstring>
using namespace std;
const int N = 6;
char f[N][N],backup[N][N];
int dx[] = {0,0,0,1,-1},dy[] = {0,1,-1,0,0};
void turn(int x,int y){
    for(int i = 0;i < 5;i++){
        int a = dx[i] + x;
        int b = dy[i] + y;
        if(a < 0 || a > 4 || b < 0 ||  b > 4) continue;
        f[a][b] ^= 1;
    }
}
int main(){
    int t;
    cin >> t;
    while(t--){
        for(int i = 0;i < 5;i++){
            for(int j = 0;j < 5;j++){
                cin >> f[i][j];
            }
        }
        memcpy(backup,f,sizeof f);
        int res = 0x3f3f3f3f;
        for(int op = 0;op < 1 << 5;op++){
            int step = 0;
            for(int i = 0;i < 5;i++){
                // 卡壳,括号处理出问题了,这里的括号把下面的部分全包住了;
                if(op >> i & 1){
                    turn(0,i);
                    step++;
                }
            }
                for(int i = 0;i < 4;i++){
                    for(int j = 0;j < 5;j++){
                        if(f[i][j] == '0'){
                            turn(i+1,j);
                            step++;
                        }
                    }
                }
                bool dark = false;
                for(int i = 0;i < 5;i++){
                    if(f[4][i] == '0') dark = true;
                }
                if(!dark) res = min(step,res);
                memcpy(f,backup,sizeof f);
        }
        if(res > 6) res = -1;
        cout << res << endl;
    }
}
目录
相关文章
|
17天前
|
缓存 数据处理
技术笔记:ucGUI12864从打点起
技术笔记:ucGUI12864从打点起
|
2月前
|
前端开发
前端知识笔记(十三)———单全选框控制方法,炒鸡无敌方便!!!
前端知识笔记(十三)———单全选框控制方法,炒鸡无敌方便!!!
19 0
|
11月前
|
小程序 前端开发 程序员
让别人的小程序长成自己的样子-更换window上下颜色--【浅入深出系列001】
让别人的小程序长成自己的样子-更换window上下颜色--【浅入深出系列001】 这是我的CSDN 的文章 转过来,可能有些许错误。请留言
【机房重构】VS2012 调试
【机房重构】VS2012 调试
55 0
|
Python
上古代码漫游记(二):把陷阱去掉了,反倒踩进了新的陷阱?
上古代码漫游记(二):把陷阱去掉了,反倒踩进了新的陷阱?
91 0
蓝桥杯之多界面切换处理(枚举加状态机法)
蓝桥杯之多界面切换处理(枚举加状态机法)
104 0
|
Java 数据库连接 Spring
参数校验别再写满屏的 if/else 了,差点被劝退……(上)
参数校验别再写满屏的 if/else 了,差点被劝退…(上)
106 0
参数校验别再写满屏的 if/else 了,差点被劝退……(上)
参数校验别再写满屏的 if/else 了,差点被劝退……(下)
参数校验别再写满屏的 if/else 了,差点被劝退……(下)
101 0
费解的开关
费解的开关题解
112 0