#include <iostream>
#include <queue>
//#include
using namespace std;
const int MAX=1<<16;
int generate(int state,int bit)
{
state^=(1<<bit);
if(bit>=4)
{
state^=(1<<(bit-4));
}
if(bit<=11)
{
state^=(1<<(bit+4));
}
if(bit%4!=3)
{
state^=(1<<(bit+1));
}
if(bit%4)
{
state^=(1<<(bit-1));
}
return state;
}
int dfs(int start_state)
{
int steps[MAX];
int now_state;
int generate_state;
if(start_state == 0||start_state==(1<<16)-1)
return 0;
memset(steps,-1,sizeof(steps));
steps[start_state]=0;
queue<int>q;
while(!q.empty())
{
q.pop();
}
q.push(start_state);
while(!q.empty())
{
now_state = q.front();
q.pop();
if(now_state==0||now_state==(1<<16)-1)
{
return steps[now_state];
}
for(int i=0;i<16;i++)
{
generate_state = generate(now_state,i);
if(steps[generate_state]<0)
{
q.push(generate_state);
steps[generate_state]=steps[now_state]+1;
}
/*if(generate_state==0||generate_state==(1<<16)-1)
{
return steps[generate_state];
}*/
}
}
return -1;
}
int main()
{
int start_state = 0;
for(int i=0;i<16;i++)
{
char c;
cin>>c;
if(c == 'w')
start_state = start_state*2+1;
else
start_state = start_state*2;
}
/*for(int i=0;i<16;i++)
{
int a = (start_state&(1<<(15-i)));
if(a)
cout<<1;
else
cout<<0;
}*/
int steps = dfs(start_state);
if(steps<0)
cout<<"Impossible"<<endl;
else
cout<<steps<<endl;
//system("pause");
return 0;
}
POJ 1753 枚举
最新推荐文章于 2022-02-25 19:38:17 发布