#include <cstdio>#include <cstring>#include <queue>#include <iostream>using namespace std;int step;int bfs(int start){ queue<int> Queue; int book[65536],last=start; memset(book,0,sizeof(book)); Queue.push(start); book[start]=1; step=0; while(!Queue.empty()){ int head=Queue.front(); Queue.pop(); if(head==0||head==65535){ return 1; } for(int i=0;i<16;i++){ int temp=head^(1<<i); if((i+1)%4) temp=temp^(1<<(i+1)); if(i%4) temp=temp^(1<<(i-1)); if(i>3) temp=temp^(1<<(i-4)); if(i<12) temp=temp^(1<<(i+4)); if(!book[temp]){ book[temp]=1; Queue.push(temp); } } if(head==last){ step++; last=Queue.back(); } } return 0;}int main(){ char ch; int t,start=0; for(int i=0;i<16;i++){ ch=getchar(); t=(ch=='b'?1:0); start=(t<<i)+start; if((i+1)%4==0){ getchar(); } } int flag=bfs(start); if(flag){ cout<<step<<endl; } else{ cout<<"Impossible/n"; } return 0;}
新闻热点
疑难解答