poj1753Flip Game(DFS+枚举)

POJ1753-Flip Game 北大POJ1753-Flip Game 解题报告+AC代码 立即下载

点击打开原题链接

Flip Game
Time Limit: 1000MS Memory Limit: 65536K
Total Submissions: 41717 Accepted: 18047

Description

Flip game is played on a rectangular 4x4 field with two-sided pieces placed on each of its 16 squares. One side of each piece is white and the other one is black and each piece is lying either it's black or white side up. Each round you flip 3 to 5 pieces, thus changing the color of their upper side from black to white and vice versa. The pieces to be flipped are chosen every round according to the following rules:
  1. Choose any one of the 16 pieces.
  2. Flip the chosen piece and also all adjacent pieces to the left, to the right, to the top, and to the bottom of the chosen piece (if there are any).

Consider the following position as an example:

bwbw
wwww
bbwb
bwwb
Here "b" denotes pieces lying their black side up and "w" denotes pieces lying their white side up. If we choose to flip the 1st piece from the 3rd row (this choice is shown at the picture), then the field will become:

bwbw
bwww
wwwb
wwwb
The goal of the game is to flip either all pieces white side up or all pieces black side up. You are to write a program that will search for the minimum number of rounds needed to achieve this goal.

Input

The input consists of 4 lines with 4 characters "w" or "b" each that denote game field position.

Output

Write to the output file a single integer number - the minimum number of rounds needed to achieve the goal of the game from the given position. If the goal is initially achieved, then write 0. If it's impossible to achieve the goal, then write the word "Impossible" (without quotes).

Sample Input

bwwb
bbwb
bwwb
bwww

Sample Output

4

题目大意:一个4*4的矩阵,每一格要么是白色,要么是黑色。现在你可以选择任意一个格变成相反的颜色,则这个格的上,下,左,右四个格也会跟着变成相反的色(如果存在的话)。问要把矩阵的所有格子变成同一个颜色,你最少需执行几次上面的操作。

 

解题思路:枚举+dfs。一个关键点:对于每一格,只能翻0或1次(易证)。因此枚举就存在2^16 =4096个状态,最多执行16次操作,因此可行。

#include
  
   
#include
   
    
using namespace std;
char s[5][5];
bool flag=false;
int step=0;
bool judge(){
	for(int i=1;i<=4;i++){
		for(int j=1;j<=4;j++){
			if(s[1][1]!=s[i][j]){
				return false;
			}
		}
	}
	return true;
}
void change(int x,int y){
	if(s[x][y]=='b') s[x][y]='w';
	else s[x][y]='b';
}
void turn(int x,int y){
	change(x,y);
	if(x-1>0)change(x-1,y);
	if(x+1<5)change(x+1,y);
	if(y-1>0)change(x,y-1);
	if(y+1<5)change(x,y+1);
}
void dfs(int x,int y,int deep){
	if(deep==step){
		flag=judge();
		return;
	}
	if(x>4||flag){
		return;
	}
	turn(x,y);
	if(y==4){
		dfs(x+1,1,deep+1);
		turn(x,y);
		dfs(x+1,1,deep);
	}
	else{
		dfs(x,y+1,deep+1);
		turn(x,y);
		dfs(x,y+1,deep);
	}
	return;
}
int main(){
	for(int i=1;i<=4;i++){
		for(int j=1;j<=4;j++){
			scanf("%c",&s[i][j]);
		}
		getchar();
	}
	for(step=0;step<17;step++){
		dfs(1,1,0);
		if(flag==true){
			break;
		}
	}
	if(flag==true){
		printf("%d\n",step);
	}
	else
		printf("Impossible\n");
}
 
   
  


关于esp32蓝牙模块的使用——esp32学习笔记 关于esp32蓝牙模块的使用——esp32学习笔记 零、前言 esp32自带蓝牙模块可以让我们进行蓝牙连接并进行数据交换 一、经典蓝牙BT 首先来编写代码,经典蓝牙的使用非常简单,首先声明使用了BluetoothSerial这个库,然后使用SerialBT.begin函数设置蓝牙的名字,再然后就是设置配对码,由于这里没有用到配对码,所以我将注释掉。当配对成功我们就使用printf函数打印出蓝牙配对成功。 #include <Arduino.h> #include <BluetoothSer 阅读详情

相关推荐

手把手教你用Python处理MAHNOB-HCI多模态数据集(含脑电EEG/眼动/视频数据同步实战)

本文详细介绍了如何使用Python处理MAHNOB-HCI多模态数据集,涵盖脑电(EEG)、眼动追踪和视频数据的同步解析与对齐。通过MNE-Python、pandas和OpenCV等工具,实现从BDF、TSV到XML格式的高效处理,解决时间轴对齐难题,助力情感计算与人机交互研究。

weixin_30998797的博客 369

POJ 1753

1753 题是一个基本的枚举算法的题,基本解题思路就是暴力枚举,但是我们需要知道即便是暴力枚举,也是需要认真分析问题的。 题意:有一个4*4的棋盘,棋盘上有黑白格,每一次你可以翻其中的一个格子。一个格子(x,y)如果被翻,它相邻的前后左右四个格子(如果在棋盘上)也要翻转。现在给你一个初始的棋盘状态,问把这个棋盘翻转到全黑或全白的最少次数;若不能达到全黑或全白,输出Impossible。 思路:只有4*4的棋盘,同时格子只有黑白两面。对于同一个格子,翻两次和不翻没有区别。同时,我们会发现,假如第一行的状态已经

Joaniee的博客 1006

ECU-TEST笔记&使用技巧01

说明 1)所述均基于如下环境:ECU-TEST 8.0、Win10系统、NI Veristand 2018(HIL测试)。不排除因为版本及软件环境问题,所述方法不奏效或有更好的方法,欢迎交流,一起提高。 2)本博客以问答形式进行,所述问题均来自于实际测试(包括MIL、HIL测试)遇到的问题及需求,目的是提高测试效率和自动化测试序列的可维护性。 3)本博客尽量从测试方法及ECU-TEST原...

Eigrl的博客 1万+

学习随笔——POJ题目1753:Flip Game解答

本题题目链接:http://poj.org/problem?id=1753 题目截图如下: 题目大意:在4*4棋盘上有黑白子若干,现需要翻动若干次棋盘上的棋子实现棋盘上的棋子全白或全黑。翻动的规则是:当翻动某一棋子时,其上下左右棋子也需被翻动。求翻动的最小次数,如果无法实现,则需要输出提示信息“Impossible”。 一道枚举的题目,根据分析,我们很容易知道同一个位置的棋子翻动两次与未翻动...

starsum的博客 782

Sony DPT RP1/CP1破解攻略

前言 自己有一台Sony DPT CP1和一台kindle,两个都已经用了很多年。直到最近发现微信读书上经常可以找到一些免费而且不错的书,所以就萌生了在两台机器上使用微信读书的想法。kindle比较容易实现,直接打开内置浏览器,进入微信读书网页版就行了,而Sony的电纸书则只能通过破解+安装微信读书的方式实现。大概弄了两三个小时吧,也遇到了一些问题,所以这里记录一下整个过程,希望能方便后来的使用者。 首先感谢HappyZ, osc_t5nbj8ds。前者是提供公开破解的方法的大神,后者则是解决了我遇到的问题

weixin_43467572的博客 1万+

HID设备开发避坑指南:如何利用Windows内置驱动快速实现USB键盘模拟

本文详细解析了HID设备开发中的免驱方案与USB键盘模拟技术,重点介绍了HID协议的核心优势、开发基础架构及Windows平台的实现方法。通过实战案例和代码示例,帮助开发者快速掌握USB键盘模拟技术,避免常见开发陷阱,提升设备兼容性和性能。

lambda的博客 682

POJ——1753(枚举)

题目地址:http://poj.org/problem?id=1753 题意:给出4*4的黑色或白色的方格,要求改变最少的方格使之变成全黑或全白。(改变的时候将会改变自身加和上下左右)。 思路:直接枚举,共有2^16(16个方格,要么改变(用1表示),要么不改变(用0表示)的两种状态)种可能。 源代码: #include using namespace std; int main()

luoshenzhisi 926

从零构建AI智能体:基于opencode框架的Agent开发全流程指南

AI智能体(AI Agent)作为人工智能领域的重要发展方向,正从概念走向工程实践。其核心原理在于赋予AI自主规划、执行和迭代的能力,使其不再局限于简单的问答,而是能够理解复杂目标、分解任务、调用工具并完成闭环。这一技术价值在于将AI从“对话伙伴”升级为“执行伙伴”,极大地拓展了自动化边界,在智能客服、数据分析、自动化运维等场景展现出巨大潜力。本文聚焦于如何利用opencode这一热门开发框架,快速构建具备实际能力的智能体。通过拆解其核心组件如技能库、规划器与运行时,并结合具体实践案例,系统阐述了从环境搭建

weixin_29055699的博客 434

poj1753【dfs】详细解析注释

poj刷题记录,dfs方法

m0_45483025的博客 353

WRF中使用ERA5再分析数据

   本人在做一些实例时,需要用到最新的ERA5再分析数据集,其中我下载的是ERA5 hourly data on pressure levels form 1979 to present和ERA5 hourly data on single levels from 1979 to present中的3天数据。 1、注册climate copernicus账号 下载ERA5数据前先要注册其账号 2、选择变量    WRF中对于气象数据的字段有具体的要求, ......

GIS 8170

芒果YOLOv8改进16:检测头Head篇:即插即用|新颖轻量化非对称多级压缩LADH检测头,原创改进适配YOLOv8高效检测头,检测头新颖性改进,全网首发独一份

YOLOv8代码改进教程:即插即用|新颖轻量化非对称多级压缩LADH检测头🎈

包括YOLOv5、YOLOv7、YOLOv8等模型改进 5611

POJ1753——DFS+枚举——Flip Game

Description Flip game is played on a rectangular 4x4 field with two-sided pieces placed on each of its 16 squares. One side of each piece is white and the other one is black and each piece is...

dgjm4087的博客 2259

Mamba-YOLOv8深度解析:基于状态空间模型的下一代目标检测架构(含完整代码与实战部署)文末含资料链接!

通过本文的完整指南,您将掌握从理论创新到工程落地的全流程技术细节。立即动手实践,开启目标检测的新纪元!

FJN110的博客 519

POJ 1753 Flip Game【翻转棋盘+枚举+dfs】

方法:一、枚举(此处所用)           二、用二进制记录下标(尚未实现)          三、类比于玩魔方游戏(思路来自黄超,尚未实现) 原题链接:http://poj.org/problem?id=1753 Flip Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissi

free斩 6661

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

poj1753 Flip Game(枚举,DFS)

题意:一个4*4的围棋棋盘,黑白子随机,每次翻转同时翻转四周的棋子,最少翻转几次使所有棋子同色。 代码,非常漂亮的DFS #include <cstdio> #include <iostream> using namespace std; int map[10][10]={0};//考虑到要不断翻转,我们用0和1代表棋盘黑白两种颜色,这样翻转就可以用“非”运算符来代替了 int dir[5][2]={{-1,0},{1,0},{0,-1},{0,1},{0,0}}; int sum;

For_ACM的博客 286

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

POJ 1753 Flip Game(dfs+枚举)

POJ 1753 题意: 输入一个4*4的图像,由黑白两色组成,定义一种操作为:改变某个格子内小球的颜色(黑变白,白变黑),同时其上下左右的格子内小球也将变色。求最少多少次操作能使之成为纯色图案。 思路: 对一个格子操作偶数次等于没有操作,操作奇数次等于操作一次,所以答案在0~16以及impossible之间。 从n=0开始枚举n次操作可能的组成情况,即操作哪几个格子,若某种组合能变

a novice 848

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

poj1753 Flip Game 【dfs + 暴力枚举】

题意: 给你一个只有黑白棋的4*4的棋盘 你有一种操作 你可以对其中某一个位置的棋子进行翻转 使其变换颜色,而且该棋子上下左右都会进行翻转 请问最少进行几次操作可以使得棋盘颜色一致 如没有就打印“Impossible” 题解: 因为该棋盘只有16个格子, 且每个格子无论翻转多少次,都只有两种状态,而且你对每个位置只有操作和不操作两种选择, 所以 一共会有 2^16 种方案, 所以我...

OOOak 1049

POJ 1753 Flip Game (DFS + 枚举)

题目:http://poj.org/problem?id=1753 这个题在开始接触的训练计划的时候做过,当时用的是DFS遍历,其机制就是把每个棋子翻一遍,然后顺利的过了,所以也就没有深究。 省赛前一次做PC2遇到了机会一模一样的题,只不过是把棋盘的界限由4X4改为了5X5,然后一直跑不出结果来,但是当时崔老湿那个队过了,在最后总结的时候,崔老湿就说和这个题一样,不过要枚举第一行进行优化。

顺便A道题 1042

poj 1753 : Flip Game (枚举+dfs)

poj 1753 : Flip Game (枚举+dfs) 题意:一个4*4的矩阵,每一格要么是白色,要么是黑色。现在你可以选择任意一个格变成相反的颜色,则这个格的上,下,左,右四个格也会跟着变成相反的色(如果存在的话)。问要把矩阵的所有格子变成同一个颜色,你最少需执行几次上面的操作。   思路:枚举+dfs。一个关键点:对于每一格,只能翻0或1次(易证)。因此枚举就存在2^16 =40

略略略的博客 474

POJ 1753 Flip Game DFS枚举

看题传送门:http://poj.org/problem?id=1753 DFS枚举的应用。 基本上是参考大神的。。。。 学习学习。。 #include #include using namespace std; int n,s,d,ans; bool a[5][5],flag=false; //判断全部一样的情况 bool alllike() { for(int i=0;

细语呢喃 739

POJ 1753 Flip Game(枚举+DFS)

Flip Game Time Limit:1000MS Memory Limit:65536K Total Submissions:17012 Accepted:7377 Description Flip game is played on a rectangular 4x4 field with t...

weixin_30746117的博客 132

poj 1753 Flip Game (dfs||位运算)

poj 1753 Flip Game 牛客题目 poj题目 题目大意:就是说有一个4*4的棋盘,棋盘上有16个黑白棋子随机摆放b代表黑色棋子,w代表白色棋子,现在我们可以操作这个棋盘改变棋子的颜色使整个棋盘最终都只有一种颜色的棋子,操作就是翻转棋子,白色棋子翻转就是黑色,反之亦然,每次翻转一枚棋子,它的周围四个(上、下、左、右)四枚棋子都要随之翻转,求最小翻转次数,使得最终棋盘上只有一种颜色的棋子。 输出:如果当前已经是符合题目的状态那么不用翻转,直接输出0,如果递归之后还是不能变为符合题目的状态那么输

少年白马 353

poj1753 Flip Game dfs 枚举 待补完 位运算

Flip Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 41219   Accepted: 17896 Description Flip game is played on a rectangular 4x4 field with two-sided

kyoma的博客 501

POJ1753 Flip Game DFS+枚举

题目大意:有一个4×4的棋盘,棋盘上每一点都有黑白两面,每次可以翻转任意一点,在翻转某一点时,该点上下左右的4个临近点同时也会被翻转,现在问你要使棋盘上所有点的颜色统一所需要的最小翻转次数。 分析:其实这道题是典型的高斯消元,不过我是用DFS来做的。 首先我们知道,对于棋盘上任意一点,翻转偶数次是没有意义的,翻转奇数次和翻转一次是一样的,这就意味着,最大的翻转次数也不会超过4×4=16次,这样

AC_Gibson的专栏 1138

POJ 1753 Flip Game dfs + 枚举

来源:http://poj.org/problem?id=1753 题意:给一个4*4的棋盘,上面有黑色或者白色的棋子。每次可以改变一个方格的棋子,若改变某棋子,则该棋子上下左右和其本身的颜色都要改变。问最少经过多少步的改变,可以变化成颜色都一样。 思路:仔细考虑,可以发现,一个位置的棋子,要么保持原状不变,要么改变一次。因为改变偶数次和不改变的效果是一样的,改变奇数次和改变1次的效果是一样的

1136

poj 1753 Flip Game(枚举,dfs)

先放上我参考的题解:http://blog.youkuaiyun.com/lyy289065406/article/details/6642595看第一眼感觉和poj 3279题差不多,只是目标不一样。poj 3279是要求全部白面向上,直接用循环枚举比较方便。这个题目是要求同一个颜色的面向上,朝上的面就有两种颜色了,如果像3279那个题一样作的话,感觉就要麻烦了一点。于是就看了上边链接大神的题解,恍然大悟阿。

梦幻的蔷薇色 565
上一篇: poj3094Quicksum(水题)
下一篇: 哈尔滨理工大学全国邀请赛A题(dp)
luckcircle
博客等级 码龄10年 13粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值