POJ 1753 Flip Game(递归枚举)

这是一个关于POJ 1753问题的解析,内容涉及一个4*4的棋盘游戏,目标是通过翻转格子使棋盘全黑或全白。题目指出,每次翻转会影响相邻四格,且翻转次数对奇偶性有特定影响。解决方案是使用递归枚举所有可能的状态,寻找达到全黑或全白的最少翻转次数。若无法达到,则输出'Impossible'。已提供通过验证的AC代码实现。
摘要由CSDN通过智能技术生成

题目:1753

题意:有一个4*4的棋盘,棋盘上有黑白格,每一次你可以翻其中的一个格子。一个格子(x,y)如果被翻,它相邻的前后左右四个格子(如果在棋盘上)也要翻转。现在给你一个初始的棋盘状态,问把这个棋盘翻转到全黑或全白的最少次数;若不能达到全黑或全白,输出Impossible。

题解:对于每一个格子,翻奇数任意次和翻一次没有区别,翻偶数任意次和翻0次没有区别,所有直接递归枚举所有的状态即可

AC代码:

#include<iostream>
using namespace std;

#define border 100
int c[16] = {0};   //存储状态矩阵
int ans = border;  //步数

void change(int i) {
	int x = i / 4;
	int y = i % 4;
	c[i] = !c[i];
	if (x > 0)
		c[i - 4] = !c[i - 4];
	if (x < 3)
		c[i + 4] = !c[i + 4];
	if (y > 0)
		c[i - 1] = !c[i - 1];
	if (y < 3)
		c[i + 1] = !c[i + 1];
}

bool check() {    //测试是否全白或者全黑
	for (int i = 0; i < 15; i++)
		if (c[i] != c[i + 1])
			return false;
	return true;
}

void dfs(int num, int cnt) {   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值