POJ 1753 Flip Game(回溯)
生活随笔
收集整理的這篇文章主要介紹了
POJ 1753 Flip Game(回溯)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1. 題目
- 1.1 題目鏈接
- 1.2 題目大意
- 1.3 解題思路
- 2. 代碼
- 2.1 Wrong Answer代碼
- 2.2 Accepted代碼
1. 題目
1.1 題目鏈接
http://poj.org/problem?id=1753
1.2 題目大意
一個黑白棋子的棋盤,一個反過來周圍四個也跟著反過來(如果存在的話),顏色取反,問最少反轉次數使得顏色全白或者全黑,不存在解的話輸出信息。
1.3 解題思路
采用回溯算法,暴力枚舉
2. 代碼
2.1 Wrong Answer代碼
/*** @description: * @author: michael ming* @date: 2019/7/11 22:09* @modified by: */ #include <iostream> #include <string> using namespace std; bool a[4][4]; bool isok()//判斷是否都是同種顏色 {int i, j;for(i = 0; i < 4; ++i){for(j = 0; j < 4; ++j){if(a[i][j] != a[0][0]){return false;}}}return true; } void flipAndUpdate(int r, int c)//翻轉r,c處及其周圍棋子 {a[r][c] = !a[r][c];if(r-1 >= 0)a[r-1][c] = !a[r-1][c];if(r+1 < 4)a[r+1][c] = !a[r+1][c];if(c-1 >= 0)a[r][c-1] = !a[r][c-1];if(c+1 < 4)a[r][c+1] = !a[r][c+1]; } void flip(int r, int c,int curstep, long &minstep) {if(isok()){if(curstep < minstep)minstep = curstep;return;}if(c+1 < 4)flip(r,c+1,curstep,minstep);else if(c+1 == 4 && r+1 < 4)flip(r+1,0,curstep,minstep);flipAndUpdate(r,c);curstep++;if(c+1 < 4)flip(r,c+1,curstep,minstep);else if(c+1 == 4 && r+1 < 4)flip(r+1,0,curstep,minstep);flipAndUpdate(r,c);//翻完了,還要復原? } int main() {string s;int i, j;long minstep = 65536;for(i = 0; i < 4; ++i){cin >> s;for(j = 0; j < 4; ++j){if(s[j] == 'b')a[i][j] = 1;elsea[i][j] = 0;}}flip(0,0,0,minstep);if(minstep == 65536)cout << "Impossible" << endl;elsecout << minstep;return 0; }2.2 Accepted代碼
上面代碼范圍有問題,改動如下
AC 代碼如下
總結
以上是生活随笔為你收集整理的POJ 1753 Flip Game(回溯)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html校园首页设计说明范文,网页设计作
- 下一篇: arcgis 属性表 汇总_ArcGIS