題解-翻棋子
Problem H: 翻棋子
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
#include<bits/stdc++.h>
using namespace std;
char ch;
int mp[5][5],ans=0x3f3f3f3f;
const int dir[5][2]={{0,0},{0,1},{0,-1},{1,0},{-1,0}};
bool flag;
int check(int x)
{
return (x+1)%2;
}
bool in(int x,int y)
{
return 1<=x&&x<=4&&1<=y&&y<=4;
}
bool check()
{
for(int i=1;i<=4;i++)
for(int j=1;j<=4;j++)
if(mp[i][j]!=mp[1][1])
return 0;
return 1;
}
void fan(int x,int y)
{
for(int i=0;i<5;i++)
{
int tx=x+dir[i][0],ty=y+dir[i][1];
if(in(tx,ty))
mp[tx][ty]=check(mp[tx][ty]);
}
}
void dfs(int step,int x,int y)
{
if(check())
{
ans=min(ans,step);
flag=1;
return;
}
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()
{
for(int i=1;i<=4;i++)
for(int j=1;j<=4;j++)
{
cin>>ch;
if(ch=='b')
mp[i][j]=1;
else
mp[i][j]=0;
}
dfs(0,1,1);
if(!flag)
cout<<"Impossible"<<endl;
else
cout<<ans<<endl;
return 0;
}
相關文章
- 棋子移動
- ARC186A 官方題解-ChatGPT翻譯ChatGPT
- 第五章 字串專題 ---------------- 5.2 題解:巧妙翻轉字串字串
- 【翻譯文】sync.RWMutex - 解決併發讀寫問題Mutex
- 第五章 字串專題 ---------------- 5.8 題解:將字串中按單詞翻轉字串
- Flux 深度解讀(翻譯)UX
- 2002 年考研英語真題 - 翻譯題解析
- JavaScript 事件迴圈詳解(翻譯)JavaScript事件
- Draft 文件翻譯 - 高階主題 - DecoratorsRaft
- SAP Spartacus Translation(翻譯) 相關話題
- 「翻轉字串」python之leetcode刷題|004字串PythonLeetCode
- 機器人武術擂臺---無差別組(五)推棋子演算法機器人演算法
- LRU 居然翻譯成最近最少使用?真相原來是這樣!(附力扣題解)力扣
- 2022年美賽C題翻譯+思路分享
- 【刷題日記】leetcode-493 翻轉對LeetCode
- 翻譯 | SpringBoot相關的面試問題Spring Boot面試
- 赴港上市後,新東方下一步棋子該落哪?
- [Java 8 Tutorial翻譯系列]Java forEach詳解Java
- JavaScript數字上下翻動變化詳解JavaScript
- Draft 文件翻譯 - 高階主題 - 管理焦點Raft
- 用exfe.js和canvas解決移動端 IOS 拍照上傳圖片翻轉問題JSCanvasiOS
- 《多多自走棋》今日全平臺公測 新棋子、新賽季、新玩法震撼來襲
- 一個node連結串列翻轉的面試題面試題
- LeetCode每日一題: 翻轉二叉樹(No.226)LeetCode每日一題二叉樹
- 晶片行業內 die 的翻譯及詞解晶片行業
- OfficialKaldi(一)| 關於Kaldi專案(翻譯註解)
- 題解
- 解題
- 程式碼隨想錄第9天|●151.翻轉字串裡的單詞(有題目未解決)字串
- 每日"兩"題 題解
- 手機上傳的圖片翻轉90度問題
- Android strings.xml 多語言翻譯解決方案AndroidXML
- 更新BIOS翻車的進來檢視解決方案iOS
- 《光·遇》掀獨立手遊熱潮,或成為網易騰訊主機大戰棋子?
- 微軟提出新型通用神經機器翻譯方法,挑戰低資源語言翻譯問題微軟
- XYCTF pwn部分題解 (部分題目詳解)
- 活動 | INTERFACE#4 解讀搜狗機器翻譯技術,體驗搜狗旅行翻譯寶產品
- 翻譯