您的位置:首页 > 其它

POJ-1753-Flip Game

2013-05-09 20:34 267 查看
状态压缩的BFS搜索题,我采用的是反向搜索~

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<queue>
using namespace std;
const int maxn=100001;
struct node
{
int num;
int step;
};
char map[5][5];
int ans[maxn];
queue<node> q;
void Init()
{
q.push((node){0,0});
q.push((node){65535,0});
while(!q.empty())
{
node ita=q.front();
q.pop();
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
{
int itb=ita.num;
itb^=1<<(i*4+j);
if(i>0)
itb^=1<<((i-1)*4+j);
if(i<3)
itb^=1<<((i+1)*4+j);
if(j>0)
itb^=1<<(i*4+j-1);
if(j<3)
itb^=1<<(i*4+j+1);
if(!ans[itb])
{
ans[itb]=ita.step+1;
q.push((node){itb,ans[itb]});
}
}
}
}
int main()
{
Init();
for(int i=0;i<4;i++)
scanf("%s",map[i]);
int res=0;
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
if(map[i][j]=='b')
res|=1<<(i*4)+j;
if(res==0||res==65535)
printf("0\n");
else if(ans[res]==0)
printf("Impossible\n");
else
printf("%d\n",ans[res]);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: