POJ-1753 Flip Game(翻棋子)
来源:互联网 发布:文明网络标语 编辑:程序博客网 时间:2024/06/06 12:42
题目链接:点击打开链接
题目大意:翻转游戏是在一个矩形的4x4域上进行的,它的每一个16个方块上都有两面正面的棋子。每片的一边是白色的,另一边是黑色的,每一块都是黑色或白色的。每一轮你掷3到5个,这样就把他们的上侧的颜色从黑色变为白色,反之亦然。
根据以下规则,
1.每一轮都选择被翻转的棋子:选择16块中的任意一个。
2.把选中的部分和所有相邻的部分都翻转到左边,右边,顶部,和选择的部分(如果有的话)。
向输出文件写入单个整数,即从给定位置获得游戏目标所需的最少轮数。如果目标最初是实现的,那么就写0。如果不可能实现目标,那么就写“不可能”的单词
解题思路:
因为一个棋子只有两种状态,要么黑要么白,要使得整个棋盘(本题中是4*4的棋盘)都是一种颜色,最多只要16步就好了,一个棋子实际上只要翻转一次,整个棋盘最多要翻转2^16次。
翻转次数不是很大,我们只要枚举出所有情况就好了,用dfs即可。
解题代码:
#include<iostream>using namespace std;bool map[16][16]= {false};bool flag=false;int step;int a[6]= {-1,1,0,0,0},b[6]= {0,0,-1,1,0}; //左右上中下bool judge() //判断是否全部同色{ for(int i=1; i<=4; i++) //五个位置,除开自身,只要判断四个 for(int j=1; j<=4; j++) { if(map[i][j]!=map[1][1]) return false; } return true;}void flip(int row,int col) //翻转棋子{ for(int i=0; i<=4; i++) map[row+a[i]][col+b[i]]=!map[row+a[i]][col+b[i]]; return;}void dfs(int row,int col, int deep){ if(deep==step) //判断是否从map[1][1]翻转到当前位置 { flag=judge(); return; } if(flag||row==5) return; flip(row,col); if(col<4) //将翻转后的全部遍历一遍,看是否符合 dfs(row,col+1,deep+1); else dfs(row+1,1,deep+1); flip(row,col); //若前面的循环内检验出不符合条件,则翻回来 if(col<4) dfs(row,col+1,deep); else dfs(row+1,1,deep); return;}int main(){ char fir; for(int i=1; i<=4; i++) for(int j=1; j<=4; j++) { cin>>fir; if(fir=='b') map[i][j]=true; //把黑棋标记为true,白旗为false } for(step=0; step<=16; step++) //根据思路,一共只要走4*4(16)步 { dfs(1,1,0); if(flag) break; } if(flag) cout<<step<<endl; else cout<<"Impossible"<<endl; return 0;}
~step by step
阅读全文
0 0
- POJ-1753 Flip Game(翻棋子)
- POJ 1753 翻棋子 (dfs+递归)。
- POJ 1753(Flip Game)
- Flip Game(POJ 1753)
- Flip Game(POJ-1753)
- poj 1753 Flip Game
- poj 1753 Flip Game
- poj 1753 Flip Game
- poj 1753 Flip Game
- POJ 1753 Flip Game
- poj 1753 Flip Game
- poj 1753 Flip Game
- POJ-1753-Flip Game
- POJ 1753: Flip Game
- POJ 1753 Flip Game
- POJ 1753 Flip Game
- poj 1753 Flip Game
- poj 1753 Flip Game
- 2017年 10 月 9 日 机房模拟赛
- 264. Ugly Number II
- [HNOI2004]敲砖块
- 求1 到 n 的阶乘之和,n由键盘输入。
- Problem Occurred 'Starting Tomcat v7.0 Server at localhost' has encountered a problem. Server Tomc
- POJ-1753 Flip Game(翻棋子)
- hdu1530-回溯&最大团&菜鸟算法笔记-Maximum Clique
- 【BigHereo 22】---DataStructure---宏观理论(一)
- go 中 make 与 new 的区别
- First, rewinding head to replay your work on top of it...
- UVAlive7040(组合数,容斥原理,逆元)
- PHP解压ZIP压缩包,解决中文乱码问题
- 汇编实现字符串大小写转换
- No qualifying bean of type 'com.funo.oa.dao.PostDao' available问题解决:找不到dao的实现类