/*题目大意:有一个4*4的方格,每个方格中放一粒棋子,这个棋子一面是白色,一面是黑色。
游戏规则为每次任选16颗中的一颗,把选中的这颗以及它四周的棋子一并反过来,当所有的棋子都是同一个颜色朝上时,
游戏就完成了。现在给定一个初始状态,要求输出能够完成游戏所需翻转的最小次数,
如果初始状态已经达到要求输出0。如果不可能完成游戏,输出Impossible。
Sample Input

bwwb
bbwb
bwwb
bwww
Sample Output

4
*/

思路:
有可能没翻的时候就是全部一样的有可能翻一次就全都一样了,或许两次…最多是翻16次类似组合数
分情况:
翻0次的时候判断一下
翻1次,是翻哪一个。。。。类推
每次翻过之后还要翻回来
因为一个地方翻2次偶数次和原来的情况一样翻奇数次是改变原来的样子。
DFS()函数中的n是翻棋盘的个数,num是翻得第几个棋盘

include


#include<stdio.h>
char s[4][4];
int flag,sum=0;
int change(int i)
{int r=i/4,c=i%4;s[r][c]=s[r][c] == 'w'?'b':'w';if(r > 0)s[r-1][c]=s[r-1][c] == 'w'? 'b' :'w' ;if(r < 3)s[r+1][c]=s[r+1][c] == 'w'? 'b':'w';if(c  >0)s[r][c-1]=s[r][c-1]== 'w' ?'b':'w';if(c < 3)s[r][c+1]=s[r][c+1] =='w'? 'b':'w';
}
int judge()
{int i,j;int a=s[0][0];for(i=0; i<4; i++){for(j=0; j<4; j++){if(s[i][j]!=a)return 0;}}return 1;
}
int dfs(int n,int num)
{if(n==0){if(judge()){return 1; }return 0;}for(int i=num;i<16;i++){change(i);if(dfs(n-1,i+1))return 1;sum++;change(i);}return 0;}
int main()
{int i,j;for(i=0;i<4;i++){for(j=0;j<4;j++){scanf("%c",&s[i][j]);}getchar();}/*  for(i=0;i<4;i++){for(j=0;j<4;j++){printf("%c",s[i][j]);}printf("\n");}*/flag=0;for(i=0;i<16;i++){if(dfs(i,0)){flag=1;break;}}
//  printf("%d\n",sum); if(flag)printf("%d\n",i);elseprintf("Impossible\n");return 0;
}

POJ1753 flip Game翻转棋盘相关推荐

  1. NC106350 POJ1753 Flip Game 翻转游戏

    网上上课写的题目  POJ传送们http://poj.org/problem?id=1753 先贴代码,感觉里面重点部分说的已经比较清楚了 #include <iostream> #inc ...

  2. POJ1753 Flip Game

    题目链接:http://poj.org/problem?id=1753 大致题意:翻转游戏在一个长方形的4x4场地上进行,在其16个方格中分别放置双面棋子.每个棋子的一面是白色,另一面是黑色,每个都是 ...

  3. poj1753 Flip Game(枚举Enum+dfs)

    转载请注明出处:http://blog.csdn.net/u012860063?viewmode=contents 题目链接:http://poj.org/problem?id=1753 ------ ...

  4. Flip Game翻转游戏

    4*4的棋盘,棋盘上的每个位置都是黑或白,每个位置的颜色可以翻转,并且翻转一个位置的同时其周围的棋子的颜色也同时翻转.给一个目标状态,问多少步可以到达目标状态. 广度优先搜索. #include &l ...

  5. opencv_python:cv2.flip() 图像翻转函数

    文章目录 1 cv2.flip()函数 2 demo 3 效果 原图 image3 = cv2.flip(image, -1) 水平垂直翻转 image3 = cv2.flip(image, 0) 垂 ...

  6. POJ1753 Flip Game题解

    题目大意: 在一个4*4的方格中有16个双面棋子他们分别是黑面和白面,我们可以选择任意一颗棋子进行翻转,翻转后其上下左右的棋子也会被翻转,要求我们对棋子进行翻转求出棋子全部翻为黑色或者全部翻为白色的最 ...

  7. poj3279 Fliptile(翻转棋盘)

    Farmer John knows that an intellectually satisfied cow is a happy cow who will give more milk. He ha ...

  8. POJ-1753 Flip Game 枚举 状态压缩

    刚开始做这题时总是在想应该用何种的策略来进行翻装,最后还是没有想出来--- 这题过的代码的思路是用在考虑到每个点被翻装的次数只有0次或者是1次,所以对于16个点就只有2^16中请况了.再运用位运算将状 ...

  9. poj1753 Flip Game

    2017-10-5 解答 与开灯问题类似.从上向下看,第一行的只与本行以及下一行有关,搜索可缩小至2的N次方 代码 #include<iostream> using namespace s ...

最新文章

  1. java 方法引用无效_InvalidProgramException:调用方法时无效的IL代码
  2. 奇妙的棋盘(建图+搜索)
  3. python mulit函数_python – 将函数应用于MultiIndex pandas.DataFrame列
  4. 一个linux 和 Windows下都可用的 scoket
  5. 2020年终回顾:时间会回答成长,成长会回答梦想
  6. [转载]struts+hibernate遇到的错误总结
  7. C++关于虚基类、构造函数、析构函数、成员对象的两个程序浅析
  8. 北京 | 阿里摩酷实验室 招聘 研究型实习生/社招
  9. Dev控件GridControl 的使用
  10. mysql死锁 等待时间_mysql死锁,等待资源,事务锁,Lock wait timeout exceeded; try restarting transaction解决...
  11. 【51nod】1776 路径计数
  12. unity 获取 AudioSource 分贝值
  13. 富文本编辑器summernote的使用
  14. Kubernetes 外部 IP Service 类型
  15. 手机手写签名 php,基于canvas实现手写签名(vue)
  16. js 递归函数(函数自己调用自己)
  17. 开源机器人控制软件OROCOS
  18. 支付宝五福java_2021年集支付宝五福攻略 一个账号一天最少扫到10张+ 扫一轮下来 基本要啥福有啥福!...
  19. 【C++】右值引用、移动语义、完美转发(下篇)
  20. MATLAB基本概念

热门文章

  1. 你应该要懂的宇宙真相——《给忙碌者的天体物理学 》下篇
  2. 杭州SEO每天一研究——有成长的SEOER没有顶尖SEOER
  3. 智能电视也进入消费者重视芯片的时代了
  4. C++和Rust_自从尝了Rust,Java突然不香了
  5. 什么是EISA分区,如何删除
  6. 网络路径查询traceroute
  7. 阿里巴巴建成全球超大规模数据中心内“RDMA高速网”,以支撑人工智能科学计算
  8. mysql与其他连接需要的框架_VS2013与MySql建立连接;您的项目引用了最新实体框架;但是,找不到数据链接所需的与版本兼容的实体框架数据库 EF6使用Mysql的技巧...
  9. 区块链革命,革的是哪些“黑中介”的命?
  10. Qt延时处理的四种方法