description
有乙個4*4的棋盤,放有16枚棋子。
每個棋子都是一面黑一面白,一開始有的黑面朝上,有的白面朝上。
下面是乙個例子,這個例子用文字描述為:
bwbw
wwww
bbwb
bwwb
我們可以任選乙個棋子,把它自己和它的相鄰棋子(上下左右,如果有的話)翻面。
比如在例子中如果我們選第3行第1列的棋子翻面,布局就變成如下:
bwbw
bwww
wwwb
wwwb
題目求出能把所有棋子都翻成白色或都黑色的最少的步數。
input
4行每行4個字元,可能是b(黑)或w(白)
output
乙個數,最少步數。如果無解輸出impossible
sample input
bwbw
wwww
bbwb
bwwb
sample output
impossible
hint
#includeusing namespace std;
char ch;
int mp[5][5],ans=0x3f3f3f3f;
const int dir[5][2]=,,,,};
bool flag;
int check(int x)
bool in(int x,int y)
bool check()
void fan(int x,int y)
}void dfs(int step,int x,int y)
if(x==5)
return;
fan(x,y);
if(y==4)
dfs(step+1,x+1,1);
else
dfs(step+1,x,y+1);
fan(x,y);
if(y==4)
dfs(step,x+1,1);
else
dfs(step,x,y+1);
return;
}int main()
dfs(0,1,1);
if(!flag)
cout<<"impossible"
cout
}
棋子移動題解
魔法世界的歷史上曾經出現過一位赫赫有名的不敗戰神陳慶之,陳慶之以棋道悟兵法,一生身經數百戰,沒有一場敗績,而且沒有一場不是在絕對的劣勢中大勝敵軍。受此影響,魔法世界開始流行一種叫棋子移動的遊戲,即有2n個棋子 n 4 排成一行,開始位置為白子全部在左邊,黑子全部在右邊,例如當n 4時,棋子排列情況為...
翻棋子遊戲與Nim遊戲
翻棋子遊戲 題意 乙個棋盤上每個格仔有乙個棋子,每次操作可以隨便選乙個朝上的棋子 x,y 代表第i行第j列的棋子,選擇乙個形 如 x,b 或 a,y 其中b y,a x 的棋子,然後把它和 x,y 一起翻轉,無法操作的人輸。分析 把座標為 x,y 的棋子看成大小分別為x和y的兩堆石子,則本題轉化為了...
翻幣問題 題解
有n個硬幣 6 n 20000 全部正面朝上排成一排,每次將其中5個硬幣翻過來放在原位置,直到最後全部硬幣翻成反面朝上為止。試程式設計找出步數最少的翻法,輸出最少步數及翻法。從鍵盤輸入乙個正整數n 6 n 20000 表示硬幣的數量。第1行 乙個整數,表示最少步數 第2行至最後一行 先是乙個整數,表...