poj1753Flip Game(dfs)

Flip Game  思想很不成熟,

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int map[4][4];
int ans=100;

int f()
{
    for(int i=0;i<4;i++)
    {
        for(int j=0;j<4;j++)
            if(map[i][j]!=map[0][0])
              return 0;

    }
     return 1;
}

void fan1(int x,int y)
{
    if(x>=0&&x<4&&y>=0&&y<4)
        map[x][y]=!map[x][y];
}
void fan(int x,int y)
{
    fan1(x,y);
    fan1(x-1,y);
    fan1(x+1,y);
    fan1(x,y-1);
    fan1(x,y+1);
}
void dfs(int x,int y,int b)
{
    if(f())
    {
        if(b<ans)
        {
            ans=b;
            return ;
        }
    }
    if(x>=4||y>=4) return ;
    int xx=(x+1)%4;
    int yy=y+(x+1)/4;
    dfs(xx,yy,b);//入栈
    fan(x,y);
    dfs(xx,yy,b+1);
    fan(x,y);
}
int main()
{
    char ch;
    for(int i=0;i<4;i++)
    {
        for(int j=0;j<4;j++)
        {
          scanf("%c",&ch);
          if(ch=='b')
            map[i][j]=0;
          else map[i][j]=1;
        }
        getchar();
    }
    dfs(0,0,0);
    if (ans != 100)
        printf ("%d ",ans);
    else
        printf ("Impossible ");
    return 0;
}

原文地址:https://www.cnblogs.com/zhangmingcheng/p/3788603.html