POJ 1753 Flip Game【暴搜DFS】
2014-07-24 17:35
495 查看
题目:http://poj.org/problem?id=1753
#include<stdio.h> int a[4][4],min=17; int isok() { int i,j; for(i=0;i<4;i++) for(j=0;j<4;j++) if(a[i][j]!=a[0][0]) return 0; return 1; } void flip(int x,int y) { //1代表b,0代表w,0和1互变只需要取非 a[x][y]=!a[x][y]; if(x+1<4) a[x+1][y]=!a[x+1][y]; if(y+1<4) a[x][y+1]=!a[x][y+1]; if(x-1>=0) a[x-1][y]=!a[x-1][y]; if(y-1>=0) a[x][y-1]=!a[x][y-1]; } void dfs(int x,int y,int step) // 94 MS { //x为列 if(isok()) { if(step<min) min=step;return ; } if( y>3 || x>3 ) return; //边界问题,尤其注意y,因为下面对(y+1)dfs时没限制y flip(x,y); if(x+1<4) dfs(x+1,y,step+1); else dfs(0,y+1,step+1); flip(x,y); //flip是可逆操作,所以翻回来只需要再翻一次 if(x+1<4) //改变位置,但不加step。作用①改变第一个翻的位置,不能总是(0,0) dfs(x+1,y,step); //②实现跳着翻棋,dfs(1,1,1)->dfs(2,1,1)->dfs(2,1,2)相当于(2,1)坐标没动 else dfs(0,y+1,step); } int main() { int i,j; char c; for(i=0;i<4;i++) { for(j=0;j<4;j++) { c=getchar(); if(c=='b') a[i][j]=1; else a[i][j]=0; } getchar(); } if(isok()) printf("0\n"); else { dfs(0,0,0); if(min==17) printf("Impossible\n"); else printf("%d\n",min); } return 0; }
相关文章推荐
- POJ 1753 Flip Game(枚举+dfs)
- poj 1753 Flip Game【dfs】
- POJ 1753 Flip Game (DFS)
- POJ 1753 Flip Game(类似与N皇后问题的DFS)
- poj 1753 Flip Game (dfs)
- poj1753——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+枚举)
- POJ--1753--Flip Game【DFS】
- 【dfs】poj1753——Flip Game
- POJ 1753 Flip Game(回溯查找,dfs)
- poj--1753--Flip Game(dfs好题)
- POJ 1753 Flip Game (DFS)