#include <iostream> using namespace std ; int Map , change_s; bool isAC ; void change(int ID) { if(ID % 4 != 1) //左边 { Map = Map ^ (1 << (16 - (ID-1))) ; } if(ID % 4 !=0) //右边 { Map = Map ^ (1 << (16 - (ID+1))) ; } if(ID > 4) //上边 { Map = Map ^ (1 << (16 - (ID-4))); } if(ID < 13) //下边 { Map = Map ^ (1 << (16 - (ID+4))) ; } Map = Map ^ (1 << (16 - (ID))) ; } void dfs(int ID , int deep)//ID为翻哪一个棋 deep为以翻了几个棋 { if(deep == change_s) //是否已翻了change_s个棋子 { if(Map == 0 || Map == 65535) isAC = true ; //是否以达到要求 return ; } if(ID > 16) return ; //翻到了结尾 change(ID); //翻棋 dfs(ID+1 , deep + 1) ; //翻下一个 if(!isAC) { change(ID) ; //翻回来 dfs( ID+1 , deep) ; //重新翻一个 } } int main() { int i ; char c ; Map = 0 ; for( i = 0 ; i < 16 ; i++) { cin >> c ; if(c == 'b') { Map = Map | (1 << (15-i)) ; } } isAC = false ; for( change_s = 0 ; change_s <= 16 ; change_s ++) { dfs(1 , 0) ; if(isAC) break; } if(isAC) { cout << change_s << endl ; } else { cout << "Impossible" << endl ; } return 0; }
poj1753
猜你喜欢
转载自blog.csdn.net/ly1390811049/article/details/50879741
今日推荐
周排行