文章目录

  • 1. 题目
    • 1.1 题目链接
    • 1.2 题目大意
    • 1.3 解题思路
  • 2. 代码
    • 2.1 Wrong Answer代码
    • 2.2 Accepted代码

1. 题目

1.1 题目链接

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

1.2 题目大意

一个黑白棋子的棋盘,一个反过来周围四个也跟着反过来(如果存在的话),颜色取反,问最少反转次数使得颜色全白或者全黑,不存在解的话输出信息。

1.3 解题思路

采用回溯算法,暴力枚举

2. 代码

2.1 Wrong Answer代码

/*** @description: * @author: michael ming* @date: 2019/7/11 22:09* @modified by: */
#include <iostream>
#include <string>
using namespace std;
bool a[4][4];
bool isok()//判断是否都是同种颜色
{int i, j;for(i = 0; i < 4; ++i){for(j = 0; j < 4; ++j){if(a[i][j] != a[0][0]){return false;}}}return true;
}
void flipAndUpdate(int r, int c)//翻转r,c处及其周围棋子
{a[r][c] = !a[r][c];if(r-1 >= 0)a[r-1][c] = !a[r-1][c];if(r+1 < 4)a[r+1][c] = !a[r+1][c];if(c-1 >= 0)a[r][c-1] = !a[r][c-1];if(c+1 < 4)a[r][c+1] = !a[r][c+1];
}
void flip(int r, int c,int curstep, long &minstep)
{if(isok()){if(curstep < minstep)minstep = curstep;return;}if(c+1 < 4)flip(r,c+1,curstep,minstep);else if(c+1 == 4 && r+1 < 4)flip(r+1,0,curstep,minstep);flipAndUpdate(r,c);curstep++;if(c+1 < 4)flip(r,c+1,curstep,minstep);else if(c+1 == 4 && r+1 < 4)flip(r+1,0,curstep,minstep);flipAndUpdate(r,c);//翻完了,还要复原?
}
int main()
{string s;int i, j;long minstep = 65536;for(i = 0; i < 4; ++i){cin >> s;for(j = 0; j < 4; ++j){if(s[j] == 'b')a[i][j] = 1;elsea[i][j] = 0;}}flip(0,0,0,minstep);if(minstep == 65536)cout << "Impossible" << endl;elsecout << minstep;return 0;
}

2.2 Accepted代码


上面代码范围有问题,改动如下

AC 代码如下

/*** @description: * @author: michael ming* @date: 2019/7/11 22:09* @modified by: */
#include <iostream>
#include <string>
using namespace std;
bool a[5][5];
bool isok()//判断是否都是同种颜色
{int i, j;for(i = 0; i < 4; ++i){for(j = 0; j < 4; ++j){if(a[i][j] != a[0][0]){return false;}}}return true;
}
void flipAndUpdate(int r, int c)//翻转r,c处及其周围棋子
{a[r][c] = !a[r][c];if(r-1 >= 0)a[r-1][c] = !a[r-1][c];if(r+1 < 4)a[r+1][c] = !a[r+1][c];if(c-1 >= 0)a[r][c-1] = !a[r][c-1];if(c+1 < 4)a[r][c+1] = !a[r][c+1];
}void flip(int r, int c,int curstep, long &minstep)
{if(isok()){if(curstep < minstep)minstep = curstep;return;}if(r == 4)return;if(c+1 < 4)flip(r,c+1,curstep,minstep);else if(c+1 == 4)flip(r+1,0,curstep,minstep);flipAndUpdate(r,c);curstep++;if(c+1 < 4)flip(r,c+1,curstep,minstep);else if(c+1 == 4)flip(r+1,0,curstep,minstep);flipAndUpdate(r,c);//翻完了,还要复原?
}
int main()
{string s;int i, j;long minstep = 65536;for(i = 0; i < 4; ++i){cin >> s;for(j = 0; j < 4; ++j){if(s[j] == 'b')a[i][j] = 1;elsea[i][j] = 0;}}flip(0,0,0,minstep);if(minstep == 65536)cout << "Impossible" << endl;elsecout << minstep;return 0;
}

POJ 1753 Flip Game(回溯)相关推荐

  1. J - 最强王者 POJ - 1753 Flip Game 搜索+状态压缩

    J - 最强王者 POJ - 1753 Flip game is played on a rectangular 4x4 field with two-sided pieces placed on e ...

  2. POJ 1753 Flip Game DFS枚举

    看题传送门:http://poj.org/problem?id=1753 DFS枚举的应用. 基本上是参考大神的.... 学习学习.. #include<cstdio> #include& ...

  3. poj 1753 Flip Game 高斯消元 异或方程组 求最值

    题目链接:http://poj.org/problem?id=1753 题意:给出一张4*4的图,表示16个方格的初始颜色的情况(白或黑),相邻方格操作的时候会相互影响,求最少的操作次数,使得每个方格 ...

  4. POJ 1753 Flip Game 高斯消元

    和1222,1681差不多 POJ 1222 高斯消元更稳 POJ 1681 高斯消元 枚举自由变元 equ = 16 ,var = 16的方程组 #include <cstdio> #i ...

  5. POJ 1753 Flip Game(递归枚举)

    题目:1753 题意:有一个4*4的棋盘,棋盘上有黑白格,每一次你可以翻其中的一个格子.一个格子(x,y)如果被翻,它相邻的前后左右四个格子(如果在棋盘上)也要翻转.现在给你一个初始的棋盘状态,问把这 ...

  6. poj 1753 Flip Game dfs 技巧

    dfs 有翻和不翻两种选择,妙 #include <iostream>using namespace std; int map[4][4]; int next[4][2]= {{0,1}, ...

  7. POJ 1753 Flip Game (黑白棋) (状态压缩+BFS)

    题目大意:有一个4*4的方格,每个方格中放一粒棋子,这个棋子一面是白色,一面是黑色.游戏规则为每次任选16颗中的一颗,把选中的这颗以及它四周的棋子一并反过来,当所有的棋子都是同一个颜色朝上时,游戏就完 ...

  8. POJ 1753 Flip Game 简单BFS

    很简单的搜索题目,随便写. 也能枚举,因为每个点翻转2次和不翻转没区别,所以可以枚举每个点翻转或者不翻转 题目链接 1 #include <stdio.h> 2 #include < ...

  9. poj 3279 poj 1753

    poj 3279: Description Farmer John knows that an intellectually satisfied cow is a happy cow who will ...

最新文章

  1. 常见字符串和数值间得转换
  2. (转)Ubuntu12.04上NFS Server安装使用过程
  3. java实现123n_用Java编程 :输入一个正整数n,输出n!的值。 其中n!=1*2*3*…*n。 求高手指点...
  4. 【Oracle认证必读】常见问题解答
  5. python 发送邮件附件很慢_python下smtpsendmail发送特别慢
  6. 电源模块的6个优势及其作用
  7. 转自: http://blog.csdn.net/xiaxiaorui2003/article/details/3838631
  8. python接口编程_Python 中的面向接口编程
  9. MongoDB查询时排序字段为int类型和string类型的区别
  10. 2021人工智能竞赛白皮书:1000场竞赛的深度分析
  11. Ubuntu 16.04 LTS误删系统内核或驱动导致无法上网解决方案
  12. Win10更新失败的解决办法
  13. mikrotik桥接TP-link教程
  14. Ubuntu Cleaner清理工具
  15. 如何构建一个大脑---为工程师们介绍神经生理学.
  16. 如何获取三维标签的轮廓表示
  17. Java 必会10大的经典算法
  18. HTML标签检查工具
  19. 重新定义车载语音交互:服务“全家人”的“自由对话”
  20. 计算机视觉基础之数字图像(2)

热门文章

  1. html+注释格式化,使用xml注释来生成格式化的html输出
  2. 字符设备驱动高级篇1——新接口介绍
  3. SpringBoot整合Mybatis-plus实现增删查改
  4. jdk8 Function
  5. C++之Boost准标准库配置
  6. okHttp源码解析------待续
  7. 华为OJ平台——整形数组合并
  8. 高可用+负载均衡 方案
  9. java微信学习 接入
  10. SQL SERVER 中 实现主表1行记录,子表多行记录 整合成一条虚拟列