急!我已经很久没碰编程了,语言c++

请问如何用编程求解,我学习的语言是c++
急需!我已经很久没碰编程了
答案是5

img


#include <iostream>
#include <cstring>
using namespace std;

const int INF = 0x3f3f3f3f;  // 无穷大

int map[4][4];  // 开关状态

// 状态转移函数
void change(int x, int y) {
    map[x][y] ^= 1;  // 自身状态改变
    if (x > 0) map[x - 1][y] ^= 1;  // 上方开关状态改变
    if (x < 2) map[x + 1][y] ^= 1;  // 下方开关状态改变
    if (y > 0) map[x][y - 1] ^= 1;  // 左边开关状态改变
    if (y < 2) map[x][y + 1] ^= 1;  // 右边开关状态改变
}

// 模拟翻转过程
int flip() {
    int cnt = 0;  // 记录翻转次数
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            if (map[i][j] == 1) {  // 如果当前开关为“开”
                change(i, j);  // 改变开关状态
                cnt++;  // 计数器加一
            }
        }
    }
    // 如果 (1,1) 为“开”,则返回无穷大
    if (map[0][0] == 1) return INF;
    else return cnt;
}

int main() {
    // 读入开关状态
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            cin >> map[i][j];
        }
    }

    int ans = INF;
    // 枚举第一个开关的状态
    for (int s = 0; s < 2; s++) {
        memset(map, 0, sizeof(map));  // 初始化开关状态
        map[0][0] = s;  // 改变开关状态
        int cnt = flip();  // 模拟翻转过程
        ans = min(ans, cnt);  // 取最小值
    }

    // 输出结果
    if (ans == INF) cout << "impossible" << endl;
    else cout << ans << endl;

    return 0;
}

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^