您的位置:首页 > 其它

POJ 1753 Flip Game ------- DFS & 位运算 .

2013-03-14 12:55 381 查看
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: