AC之后发现此题是水题——我的水平下降了 :(
/*
* POJ-1753 flip game
* mike-w
* 2011-9-3
* creativewang@163.com
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int _flip[17]=
{
0xc800,0xe400,0x7200,0x3100,
0x8c80,0x4e40,0x2720,0x1310,
0x08c8,0x04e4,0x0272,0x0131,
0x008c,0x004e,0x0027,0x0013
};
int board;
int min=0xffff;
int white=0x0000;
int black=0xffff;
int flip(int bd,int id,int op)
{
if(op>=min||id>16)
return 0;
if(bd==white||bd==black)
{
if(min>op)
min=op;
return 0;
}
flip(bd,id+1,op);
flip(bd^_flip[id],id+1,op+1);
return 0;
}
int getBoard(void)
{
char ch;
int i;
for(i=0;i<16;i++)
{
while((ch=getchar())!='b'&&ch!='w')
;
board+=(ch=='b'?1:0);
board<<=1;
}
board>>=1;
return 0;
}
int main(void)
{
#ifndef ONLINE_JUDGE
freopen("flip.in","r",stdin);
#endif
getBoard();
flip(board,0,0);
if(min==0xffff)
puts("Impossible");
else
printf("%d\n",min);
return 0;
}