pojFilp Game2965 翻转棋子

来源:互联网 发布:qq三国js心法 编辑:程序博客网 时间:2024/05/17 08:24

题目来源    

http://poj.org/problem?id=1753

#include<stdio.h>int map[10][10],ans=999999;char s[10];int panduan()      //判断是否都为同一色{    int m=map[0][0];    for(int i=0; i<4; i++)        for(int j=0; j<4; j++)            if(map[i][j]!=m)return 0;    return 1;}void fan(int x,int y)        //将这一点和四个方向的棋子翻转{    map[x][y]=!map[x][y];    if(x-1>=0)        map[x-1][y]=!map[x-1][y];    if(x+1<4)        map[x+1][y]=!map[x+1][y];    if(y-1>=0)        map[x][y-1]=!map[x][y-1];    if(y+1<4)        map[x][y+1]=!map[x][y+1];}void dfs(int x,int y,int t){    if(panduan())     //每次搜索先判断是否为同一色,然后更新最小值    {        if(ans>t)            ans=t;        return ;    }    if(x>=4||y>=4||x<0||y<0)return ;    int nx,ny;    nx=(x+1)%4;    ny=y+(x+1)/4;    dfs(nx,ny,t);    fan(x,y);    dfs(nx,ny,t+1);    fan(x,y);    return ;}int main(){    int i,j;    for(i=0; i<4; i++)    {        scanf("%s",s);        for(j=0; j<4; j++)        {            if(s[j]=='b')    //将黑色初始为0                map[i][j]=0;            else             //白色初始1                map[i][j]=1;        }    }    dfs(0,0,0);    if(ans==999999)printf("Impossible\n");    else        printf("%d\n",ans);    return 0;}


原创粉丝点击