coder_new

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

DFS

DFS
#include<iostream>
using namespace std;

bool map[6][6],flag=0;
int dir[5][2]={{0,0},{0,1},{1,0},{-1,0},{0,-1}};
int step;

void flip(int row,int col)
{
    for(int i=0;i<5;i++)
    {
        int x=row+dir[i][0];
        int y=col+dir[i][1];
        map[x][y]=!map[x][y];
    }
}

bool check()
{
    int i,j;
    for(i=1;i<=4;i++)
    {
        for(j=1;j<=4;j++)
        {
            if(map[i][j]!=map[1][1]) return 0;
        }
    }

    return 1;
}

void dfs(int row,int col ,int dep)
{
    if(dep==step)
    {
        flag = check();
        return ;
    }

    if(flag||row==5) return ;

    flip(row,col);
    if(col<4) dfs(row,col+1,dep+1);
    else dfs(row+1,1,dep+1);

    flip(row,col);
    if(col<4) dfs(row,col+1,dep);
    else dfs(row+1,1,dep);
}

int main()
{
    char c;
    for(int i=1;i<=4;i++)
    {
        for(int j=1;j<=4;j++)
        {
            cin>>c;
            if(c=='b')map[i][j]=1;
            else map[i][j]=0;
        }
    }
    for(step=0;step<=16;step++)
    {
        dfs(1,1,0);
        if(flag)break;
    }
    if(flag)cout<<step<<endl;
    else cout<<"Impossible"<<endl;
    return 0;
}

 

posted on 2012-05-07 10:46  coder_new  阅读(180)  评论(0编辑  收藏  举报