poj1753 Flip Game #include cstdio #include iostream using namespace std; struct node{ int id; int num; 记录了次数 int nmax; 记录最大的下标 }nod[70000]; int convert(int a,int position) { int next_id=a; next_id^=(1position); up if(position-4=0) next_id^=(1(position-4)); down if(position+416) next_id^=(1(position+4)); left if(position%4!=0) next_id^=(1(position-1)); right if(position%4!=3) next_id^=(1(position+1)); return next_id; } int main() { int cur_id=0; int i,j,k=0; char color; for(i=0;i16;i++){ cincolor; if(color=='b') cur_id+=1i; } if(cur_id==0cur_id==65535) {printf(0n);return 0;} int a; int b,c; i = 1; nod[0].id = cur_id;nod[0].num = 0;nod[0].nmax = -1; while(1){ //枚举出各种情况翻的结果最后得出结果 a = nod[k].id;b = nod[k].num;c=nod[k].nmax; for(j=c+1;j16;j++) { nod[i].id = convert(a,j); nod[i].num = b+1; nod[i].nmax = j; if(nod[i].id==0nod[i].id == 65535) {printf(%dn,nod[i].num);return 0;} i++; } k++; if(nod[i-1].num==16) {printf(Impossiblen);return 0;} } return 0; }