POJ1753(DFS)

POJ 1753 翻棋子 (dfs+递归)。 终于来填坑了。依旧是递归的题目,最近做的都是关于递归的问题。下一个是汉诺塔问题。 这道题也是看了很多别人的博客才弄出来的,但是分析还是要试着自己写一下。 题意是这样的,有一个4*4的棋盘,你可以自定义输入黑白两色棋子,直到填满着整个棋盘。然后就开始翻棋,翻棋的时候,翻转当前的某个棋子的同时,它附近的上下左右4个棋子也要翻转,当然,如果翻的是边上的棋子,那就翻它附近的棋子就行了。这道题是问最少翻多 阅读详情

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 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).

imgConsider 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的棋盘,棋盘上的每一个格子里都有一颗一面黑一面白的棋子,一开始给出你棋盘的初始状态,你可以给任何一个棋子翻面,但是如果你翻了某一个棋子,那他上下左右的棋子都要翻面。问你最少需要翻多少次才能让16枚棋子都为黑或都为白。

思路

对一个格子操作偶数次等于没有操作,操作奇数次等于操作一次,所以答案在0~16以及impossible之间。

从n=0开始枚举n次操作可能的组成情况,即操作哪几个格子,若某种组合能变图案为纯色则停止。

由于总组合数达到2^16,故枚举组合情况可以用dfs来进行回溯枚举。

代码
import java.util.Scanner;

public class FlipGame {
    int[][] checkerboard = new int[6][6];
    int count = 33;

    public static boolean check(int[][] checkerboard) {
        int result = 0;
        for (int i = 0; i < checkerboard.length; i++) {
            for (int j = 0; j < checkerboard[i].length; j++) {
                result = result + checkerboard[i][j];
            }
        }
        if (result == -16 || result == 16) {
            return true;
        } else {
            return false;
        }
    }

    public void flip(int s) {
        int x = s / 4 + 1;
        int y = s % 4 + 1;
        checkerboard[x][y] = -checkerboard[x][y];
        checkerboard[x - 1][y] = -checkerboard[x - 1][y];
        checkerboard[x][y - 1] = -checkerboard[x][y - 1];
        checkerboard[x + 1][y] = -checkerboard[x + 1][y];
        checkerboard[x][y + 1] = -checkerboard[x][y + 1];
    }


    public void dfs(int s,int b){//进行深搜.s代表当前的方格,b代表翻转的方格数
        if(check(this.checkerboard)){//如果是同一种颜色
            if (this.count > b){
                this.count = b;
                return;
            }
        }
        if(s >=16){
            return;
        }
        dfs(s+1,b);
        this.flip(s);
        dfs(s+1,b+1);
        this.flip(s);

    }

    public static void main(String[] args) {
        FlipGame fg = new FlipGame();
        Scanner sc = new Scanner(System.in);
        for (int i = 1; i < fg.checkerboard.length - 1; i++) {
            String str = sc.next();
            for (int j = 1; j < fg.checkerboard[i].length - 1; j++) {
                if (str.charAt(j - 1) == 'w') {
                    fg.checkerboard[i][j] = 1;
                } else {
                    fg.checkerboard[i][j] = -1;
                }
            }
        }
        fg.dfs(0,0);
        if(fg.count == 33){
            System.out.println("Impossible");
        }else {
            System.out.println(fg.count);
        }
        sc.close();
    }
}

OpenFOAM收敛问题排查指南:从参数设置到网格优化 本文系统性地介绍了OpenFOAM计算中收敛问题的排查方法。从理解收敛本质出发,详细讲解了如何通过调优求解控制参数(如松弛因子、离散格式)、合理设置时间步长与耦合算法,以及优化网格质量来解决发散难题。文章提供了从软件设置到硬件网格的完整排查路径,帮助用户实现稳定高效的计算流体力学模拟。 阅读详情

相关推荐

Jev模型入门:从API接入到本地部署的完整实践指南

大模型的应用方式正从单一聊天窗口转向复杂的自动化工作流,而推理模型因具备指令跟随与结构化输出能力,成为构建Agent和数据处理管线的关键组件。Jev作为面向通用场景的推理模型,不仅提供了OpenAI兼容的API接口,还支持本地量化部署,兼顾隐私、可控性与长期成本。本文从模型定位出发,明确Jev与基座模型的差异,随后介绍密钥管理、API调用、参数调优,并深入演示基于Ollama与llama.cpp的本地部署流程,包括GGUF模型文件与chat template的匹配要点。针对实践中的常见问题,如密钥泄露、ma

weixin_29057237的博客 355

poj1753解题报告(1):DFS算法

摘要:选择一个棋子,它和它周围的所有棋子都要翻转一次。求最少要几次可以解决,如果不能解决输出impossible.这个问题没什么太好的办法,基本上就是枚举法,首先我们选择深度搜索优先(DFS)来解决问题.基本思路就是每次选择一个棋子进行翻转(或者不翻转),如果该棋子已经翻转过,就不需要继续翻转了.检测是否已经达到目标,如果超过16次都没有达到目标,那么它就不可能达成.同时这个题目还给了我一个教训,忘

pyb的博客 1031

QuestaSim使用Xilinx库的设置

安装QuestaSim

miracle_eicont的专栏 3407

POJ 1753 dfs+枚举

okokok 解法一:dfs+枚举 #include #include #include #include #include #include #include #include using namespace std; bool m_map[6][6],flag; //这个m_map大小主要看棋盘是从(0,0)开始,还是(1,1)开始 int step; int isok()//判断棋子是否

横济沧海的博客 3584

Python主要智能优化算法库汇总

最近几年简单浏览和对比了一些智能算法的库。现将各种库的主要信息、相关优缺点简单整理如下,各位同学可根据自己的需求和喜好进行选择。 文章目录1、DEAP2、mealpy3、scikit-opt (国产良心)4、Geat2(国产用心)5、pygmo26、pyswarms7、SciPy(想不到吧)小结 1、DEAP 项目地址:https://github.com/DEAP/deap 安装: pip install deap 优点: 起点高,发表在Journal of Machine Learning Rese

半个冯博士 2万+

如何使用obspy下载地震波形数据

如果你是地震研究学者,或者需要进行地震方面的研究,那么地震数据下载是一个必不可少的流程,本文将告诉你如何使用obspy下载想要的地震数据

monsterk1的博客 2074

POJ1753 翻硬币题解(DFS)

在POJ的first blood,一个dfs的解法,其中有很多巧妙的解法是值得学习的。但它头文件居然不能#include&lt;bits/stdc++.h&gt;,好气哦【题目】Flip GameTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 47846 Accepted: 20410DescriptionFlip game is...

zxwsbg的博客 1194

窥秘Windows 10:SAM密码破解

Windows 10作为广受欢迎的操作系统,拥有一套强大的安全措施来保护用户账号和数据安全。然而,有时候我们需要了解更多关于密码破解的知识,以加强我们的防护措施。本文将深入探讨如何突破Windows 10的SAM密码,以便更好地了解密码安全性并加强系统的保护。

Sgirll的博客 6841

POJ-1753(深搜DFS)

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 bl

Swust_ZzK的博客 610

手把手教你用CH582的USB0/1双接口玩转CherryUSB协议栈(附完整代码)

本文深入解析CH582双USB接口硬件架构,详细讲解如何通过CherryUSB协议栈实现双接口协同工作,包括中断处理设计、端点资源分配和复合设备描述符配置。提供HID+CDC复合设备实战案例,并分享高级调试技巧与性能优化方法,帮助开发者充分利用CH582的USB0/1双接口潜力。

weixin_42525637的博客 264

Python经典编程习题100例:第32例:相反顺序输出列表

不要自卑,去提升实力 互联网行业谁技术牛谁是爹 如果文章可以带给你能量,那是最好的事!请相信自己 加油o~ 本人初学Python,只为熟悉语法编写,大神请勿理会 点击下面链接 Python经典编程100例习题汇总 题目描述: 按相反的顺序输出列表的值。 解题思路: > 利用reverse函数逆序 代码: arr=['f','g','e','b'] print(arr) arr.reverse() print(arr) ...

优快云 精品推荐 1416

poj 1753||poj 2965 枚举+dfs

<br />今天编了1753   2965,枚举和DFS。刚开始自己不太会,思路是看别人的。<br />一共最多16步即可找到。枚举每一个情况。<br /> <br />poj1753<br /> <br />#include "iostream" #include "stdio.h" using namespace std; bool map[6][6],f=0; int dis[5][5]={{0,0},{0,1},{1,0},{0,-1},{-1,0}}; int step; vo

菜鸟在努力-的专栏——不积跬步,无以至千里。 1743

关于cefsharp访问iqiyi.com显示403 Forbidden解决办法(2种方法)

cefsharp不加UserAgent的默认值为 (注意126是当前cefsharp的版本)Edge浏览器的UserAgent 为 (edge的版本是128的)说明根据浏览器的不同,UserAgent可能不太一样。

无线智能模块 可视DIY智能专家 1319

POJ 1753 Flip Game (DFS)

题目链接:POJ 1753 Problem 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 blac...

G19850917的博客 202

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

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

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

POJ 1753 Flip Game(dfs+枚举)

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

a novice 847

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

POJ 1753(DFS+枚举||BFS+位运算)

题目链接http://poj.org/problem?id=1753 题意:给出一个4*4方格,b表示黑棋,w表示白棋,每次选定一个棋子,将其以及相邻点翻转,需要多少次才能使棋子全为白色或者黑色? 思路:每次棋子最多只需要翻转1次(翻转偶数次和不翻转一样,翻转奇数次和翻转1次结果一样),所以最多有2^16个不同的状态,直接枚举+DFS回溯就可以判断; 另外一种思路,每个棋子的状态用二

To be excellent! 816

POJ- 1753 + 2965(枚举+DFS)

题目:POJ-1753 题意:一个4 x 4的方格,里面有黑色和白色,问你最少多少次翻转可以让方格成为同一个颜色,每次翻转可以翻自己跟上下左右共5个方格 题解:枚举翻多少次,一个格子翻一次变成另外一个颜色,翻两次变成原来的颜色,就相当于没有进行翻转,所以本题最多翻转16次(因为某一个格子再进行一次翻转,就变成了原来的颜色,相当于没有进行翻转一样,所以那次是多余,那么就最多只有16次),枚举翻转...

Rotepad的博客 260

poj dfs相关之1753 Flip Game

poj dfs相关之1753 Flip Game

ziqi9216的博客 262

POJ1753 + POJ2965 翻牌问题 DFS方法(枚举)

之前写过非DFS方法,附上链接:https://blog.youkuaiyun.com/Cc_Sonia/article/details/89432031 今天再回过头用DFS方法,,发现,,好暴力啊。。。就是一个个枚举,看翻还是不翻。。这两道题用DFS就基本没什么区别了,主要是第二道要记录路径。附上两题的AC代码如下:(果然时间慢了好多好多。。) POJ1753: #include<cstdi...

A confused programmer 363

POJ 1753 基础搜索 DFS 七

细节决定成败,代码  尤其更甚!   POJ 1753 Flip Game:http://poj.org/problem?id=1753 题目大意 : 4X4的棋盘上随机摆放了黑或白朝上的棋子。 对任意一颗棋子翻面,其上下左右的棋子也会一同执行翻面操作   问,最少的反面次数,使得棋盘上所有棋子都为黑色或白色。   起初不能理解:一个棋盘上每个棋子只能翻一次,翻偶数次等于没有翻,这句话...

Hide_in_Code 372

POJ1753 Flip Game & POJ2965 The Pilots Brothers' refrigerator (DFS)

附poj1753题目链接http://poj.org/problem?id=1753 题目大意:在一个4*4的棋盘上共有棋子16个,每个棋子都是一面白一面黑,现在给你的任务就是使得棋子翻转最少的次数使得棋子朝上的一面要么全是白色要么全是黑色。每次翻转一个棋子该棋子的上下左右四个方向的棋子也同时会被翻转。 思路:一共有16个棋子,每个棋子有两种选择,又因为每个棋子如果翻转两遍,就相当于没

知与谁i的博客 241

POJ 1753 Flip Game【暴搜DFS】

题目:http://poj.org/problem?id=1753

某科学的程序员 545

POJ--1753--Flip Game【DFS】

链接:http://poj.org/problem?id=1753 题意:一个4*4的方格,有白棋或者黑棋,每次操作是一个位置的颜色翻转,即白变黑、黑变白,并且与它相邻的四个位置的颜色也都跟着改变,问最少要变化多少次才能使所有棋子都是白色或者都是黑色。 思路:不难看出一个棋子翻偶数次和不翻的效果是一样的,并且如果选定了一些棋子翻,翻的顺序对最后的结果是没有影响的,所以可以用DFS去枚举

阳光照耀圣西罗 963

poj.1753dfs

这道题的意思很简单,主要需要注意的有两点,第一:矩阵中的每个点都最多被主动翻一次,(注意不是被动),所以总共有2^16种可能,只要枚举每种可能了。第二:翻转的顺序对结果没有影响,所以问题的关键就在于那些点被主动翻转了。翻转多少次就有多少次round,只要求出所有round中最小的一个就是答案了,如果没有一种可能可以得到结果则输出“Impossible"。下面是代码和测试数据: //#includ

小小小小杜 16万+

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

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

少年白马 353
上一篇: POJ1562(DFS)
下一篇: POJ1979(DFS)
shui2104
博客等级 码龄10年 22粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值