Flip Game(poj1753_阵列的枚举)
来源:互联网 发布:java垃圾回收机制 编辑:程序博客网 时间:2024/06/09 17:36
题目:http://poj.org/problem?id=1753
思路1:0MS
1)递归枚举第一行,16种情况;
2) 然后分别通过下一行的翻转来使上一行全‘b’或全'w';
3)一旦第一行16种情况的其中一种形成,则下面的翻转情况就唯一确定了,所以枚举量为16;
4)最后检查最后一行是否全‘b’或全‘w’来判断满不满足全‘b’或全‘w’。
思路2:
还可使用高斯消元法做
#include <cstdio>#include <cstring>#define INF 20int cnt1;char anti(char c){if(c=='b') c='w';else c='b';return c;}void digui(char arr[][5],int cnt,int cur){if(cur==4){char arr1[5][5];int i,j,cnt2,flag;for(i=0;i<4;i++)strcpy(arr1[i],arr[i]);cnt2=cnt;for(i=1;i<4;i++){for(j=0;j<4;j++){if(arr[i-1][j]=='b'){arr[i-1][j]=anti(arr[i-1][j]);arr[i][j]=anti(arr[i][j]);if(j-1>=0)arr[i][j-1]=anti(arr[i][j-1]);if(j+1<4) arr[i][j+1]=anti(arr[i][j+1]);if(i+1<4) arr[i+1][j]=anti(arr[i+1][j]);cnt2++;}}}flag=0;for(i=0;i<4;i++){if(arr[3][i]!='w') flag=1; }if(flag==0){if(cnt2<cnt1) cnt1=cnt2;}for(i=0;i<4;i++) strcpy(arr[i],arr1[i]);cnt2=cnt;for(i=1;i<4;i++){for(j=0;j<4;j++){if(arr[i-1][j]=='w'){arr[i-1][j]=anti(arr[i-1][j]);arr[i][j]=anti(arr[i][j]);if(j-1>=0)arr[i][j-1]=anti(arr[i][j-1]);if(j+1<4) arr[i][j+1]=anti(arr[i][j+1]);if(i+1<4) arr[i+1][j]=anti(arr[i+1][j]);cnt2++;}}}flag=0;for(i=0;i<4;i++){if(arr[3][i]!='b') flag=1; }if(flag==0){if(cnt2<cnt1) cnt1=cnt2;}for(i=0;i<4;i++) strcpy(arr[i],arr1[i]); return;}else{for(int k=0;k<2;k++){if(k==1){arr[0][cur]=anti(arr[0][cur]);if(cur-1>=0)arr[0][cur-1]=anti(arr[0][cur-1]);if(cur+1<4) arr[0][cur+1]=anti(arr[0][cur+1]);arr[1][cur]=anti(arr[1][cur]);digui(arr,cnt+1,cur+1);arr[0][cur]=anti(arr[0][cur]);if(cur-1>=0)arr[0][cur-1]=anti(arr[0][cur-1]);if(cur+1<4) arr[0][cur+1]=anti(arr[0][cur+1]);arr[1][cur]=anti(arr[1][cur]);} else{digui(arr,cnt,cur+1);}}return;}}int main(){//freopen("input.txt","r",stdin);char arr[5][5]; for(int i=0;i<4;i++) { gets(arr[i]); } int sum=0;for(int i=0;i<4;i++)for(int j=0;j<4;j++) if(arr[i][j]=='w')sum+=1; if(sum==0 || sum==16) {printf("%d\n",0);return 0;} cnt1=INF;digui(arr,0,0);if(cnt1==INF) printf("Impossible\n");elseprintf("%d\n",cnt1);return 0;}
- Flip Game(poj1753_阵列的枚举)
- Flip Game(枚举)Poj
- POJ1753--Flip Game(枚举)
- POJ 1753 Flip Game 枚举
- poj1753 Flip Game 枚举+BFS
- POJ 1753 Flip Game (枚举)
- POJ 1753 Flip Game 枚举
- POJ1753 Flip Game DFS+枚举
- poj 1753Flip Game---枚举
- poj1753 Flip Game DFS,枚举
- POJ 1753 Flip Game【枚举】
- Flip Game----状压(枚举)
- poj Flip game【DFS 枚举】
- Flip Game(DFS枚举)
- POJ 1753 Flip Game (枚举)
- POJ 1753 Flip Game (枚举)
- poj 1753 Flip Game (枚举 / 十六进制的位数)
- POJ 1753 FLIP GAME——枚举深度的dfs
- WIN32界面开发之三:DUI雏形开发(一)
- Ubuntu操作基本快捷键
- 开启博客之旅
- 打开文件夹与打开文件
- XML学习
- Flip Game(poj1753_阵列的枚举)
- 正则表达式学习
- php 加载 php 加载php_mysql.dll和php_pdo_mysql.dll 失败
- smartGWT或这GWT获取资源(图片等)路径的方法
- 操作XML封装类
- cocos2d-x 一道简单面试题,触摸事件的重新分发
- DEVExpress LayoutView 颜色设置
- Zjnu Stadium(hdu3047带权并查集)
- 数据结构排序系列详解之一 插入排序