您的位置:首页 > 其它

Poj 1753 Flip Game 状态压缩 + DFS

2013-07-29 20:19 316 查看
暴力枚举

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>

using namespace std;

char c;

int m,t;

int sum = 999999;

void search(int site,int sta,int ans)
{
if(sta == 0 || sta == 65535)
{
if(ans < sum)
{
sum = ans;
}
return ;
}
else if(sta == m && ans != 0)
{
return;
}

if(site >= 17)
return;

search(site+1,sta,ans);//当前棋子不改变

sta ^= (1 << (site-1));//center

if(site%4 != 0)
sta ^= (1 << (site)); //right

if(site%4 != 1)
sta ^= (1 << (site-2)); // left

if(site >= 5)
sta ^= (1 << (site-5)); //up

if(site <= 12)
sta ^= (1 << (site+3)); //down

search(site+1,sta,ans+1);//改变当前棋子后继续枚举
}

int main()
{
int i,j;

char s[10];

sum = 999999;

for(m = 0,t = 1,i = 0;i < 4; i++)
{
scanf("%s",s);
for(j = 0;j < 4; j++)
{
if(s[j] == 'b')
m += t;
t *= 2;
}

}

search(1,m,0);

if(sum != 999999)
cout<<sum<<endl;
else cout<<"Impossible"<<endl;

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: