Flip Game

来源:互联网 发布:广电网络遥控器没反应 编辑:程序博客网 时间:2024/06/02 06:52

翻牌问题,我动一个,它的前后左右相邻的一个的状态都会改变,有多少相邻的算多少,这个题的简单指出在于它限制了该图的大小是一个4*4的,所以问题很简单了

#include <iostream>#include <cstring>using namespace std;char map[10][10];int mark[10][10];void fanpai(int x,int y){    mark[x][y]=!mark[x][y];    if(x-1>=0)        mark[x-1][y]=!mark[x-1][y];    if(x+1<4)        mark[x+1][y]=!mark[x+1][y];    if(y-1>=0)        mark[x][y-1]=!mark[x][y-1];    if(y+1<4)        mark[x][y+1]=!mark[x][y+1];}int panduan(){    int sum=0;    for(int i=0; i<4; i++)    {        for(int j=0; j<4; j++)        {            sum=sum+mark[i][j];        }    }    if(sum==0||sum==16)        return 1;    else        return 0;}int mn;void dfs(int k,int cont){    if(k==16)    {        if(panduan())            if(cont<mn)            mn=cont;    }    else    {        int x=k/4;        int y=k%4;        dfs(k+1,cont);        fanpai(x,y);        dfs(k+1,cont+1);        fanpai(x,y);    }}int main(){    memset(mark,0,sizeof(mark));    int i,j;    for(i=0;i<4;i++)    {        cin>>map[i];        for(j=0;j<4;j++)        {            if(map[i][j]=='b')                mark[i][j]=1;        }    }    mn=17;    dfs(0,0);    if(mn==17)        cout<<"Impossible"<<endl;    else        cout<<mn<<endl;    return 0;}


0 0
原创粉丝点击