poj 1753 Flip Game(dfs)
来源:互联网 发布:网络言论自由的特点 编辑:程序博客网 时间:2024/06/10 06:08
题目链接
题目大意:一个4*4的方格,上面黑白棋都有,可以任意翻转其中的一个旗子,但是这个旗子的上下左右都要跟着反转(白变黑,黑变白)
求最少次数使得棋谱全黑或全白
一个位置无非就是翻或者不翻,翻得话连动身边的一起翻,复杂度就是2^16*4,不大
果断深搜,要注意回溯,一个点翻转之后,要再次翻回来,避免一个状态的改变
#include<iostream>#include<algorithm>#include<map>#include<string>using namespace std;const int INF=1<<29;int maxn=INF; int ma[10][10]={0};int pd(){int sum=0;for(int i=0;i<4;i++){for(int j=0;j<4;j++) sum+=ma[i][j];}return sum%16==0;}void change(int i,int j){ma[i][j]=!ma[i][j];if(i+1<=3) ma[i+1][j]=!ma[i+1][j];if(i-1>=0) ma[i-1][j]=!ma[i-1][j];if(j+1<=3) ma[i][j+1]=!ma[i][j+1];if(j-1>=0) ma[i][j-1]=!ma[i][j-1];}void dfs(int i,int j,int sum){if(pd()){if(sum<maxn) maxn=sum;return;}if(i>3) return;if(j+1<=3){dfs(i,j+1,sum);change(i,j+1);dfs(i,j+1,sum+1);change(i,j+1);}else{dfs(i+1,0,sum);change(i+1,0);dfs(i+1,0,sum+1);change(i+1,0);}}int main(){for(int i=0;i<4;i++){for(int j=0;j<4;j++){char c;cin>>c;if(c=='b') ma[i][j]=1;}}dfs(0,0,0);change(0,0);dfs(0,1,1);if(maxn==INF) cout<<"Impossible"<<endl;else cout<<maxn<<endl;return 0;}
阅读全文
0 0
- POJ 1753 Flip Game (DFS)
- POJ--1753--Flip Game【DFS】
- POJ 1753 Flip Game (DFS)
- poj 1753 Flip Game【dfs】
- poJ 1753(dfs) Flip Game
- poj 1753 Flip Game(dfs)
- poj 1753 Flip Game(dfs+枚举)
- POJ 1753 Flip Game BFS/DFS
- POJ 1753 Flip Game dfs + 枚举
- POJ 1753 Flip Game ------- DFS & 位运算 .
- Poj 1753 Flip Game 状态压缩 + DFS
- POJ 1753 Flip Game DFS枚举
- POJ 1753 Flip Game (DFS + 枚举)
- POJ 1753 Flip Game【暴搜DFS】
- poj 1753 Flip Game(搜索:DFS+水题)
- poj 1753 Flip Game (dfs + 枚举)
- poj 1753 Flip Game (dfs)
- POJ 题目1753 Flip Game(DFS)
- Jquery 对除了自身,其他同胞对象
- iptables
- js的String
- Logistic regression为什么不用Square error做loss function?
- Virtualenv虚拟环境安装
- poj 1753 Flip Game(dfs)
- Linux curl 中get和post的用法详解
- shell脚本小技巧
- linux各发行版本的系统资源获取方式调研
- IDEA中常用的快捷键
- [2017百度之星程序设计大赛- 复赛] C
- 树莓派-使用xrdp实现windows 远程桌面linux
- 第五章 第三节:比较运算符与函数
- 堆(heap)