#include<iostream>
using namespace std;
int visited[16];
int Flip(int s,int i)
{
int mstate=s;
mstate^=1<<i;
if ((i-4)>=0)
{
mstate ^=1<<(i-4);
}
if (i%4!=0)
{
mstate ^= 1<<(i-1);
}
if ((i+1)%4!=0)
{
mstate ^= 1<<(i+1);
}
if (i<12)
{
mstate ^= 1<<(i+4);
}
return mstate;
}
int DFS(int state,int level,int now,int last)
{
int i;
if (level==now)
{
if (state==0 || state==65535)
{
return 1;
}
else
{
return 0;
}
}
else
{
/*if (16-last<level-now)
{
return 0;
}*/
for (i=last;i<16;i++)
{
//state=Flip(state,i);
if (visited[i]==1)
{
continue;
}
else
{
visited[i]=1;
state=Flip(state,i);
}
if (DFS(state,level,now+1,i))
{
return 1;
}
visited[i]=0;
state=Flip(state,i);
}
return 0;
}
}
int main(int argc, char* argv[])
{
char str[17];
int i;
int state =0;
i=0;
memset(visited,0,sizeof(visited));
while (i<16)
{
cin>>str[i];
if (str[i]=='b')
{
state += 1<<i;
}
i++;
}
str[i]='\0';
if (state ==0 || state ==65535)
{
cout<<0<<endl;
}
else
{
for (i=1;i<=16;i++)
{
memset(visited,0,sizeof(visited));
if (DFS(state,i,0,0))
break;
}
if (i>16)
{
cout<<"Impossible"<<endl;
}
else
{
cout<<i<<endl;
}
}
return 0;
}
POJ 1753 Flip Game ------- DFS & 位运算 .
最新推荐文章于 2022-05-22 18:22:12 发布