1. 程式人生 > >IQ使命2 Barcelona 巴塞羅那(色塊覆蓋)攻略

IQ使命2 Barcelona 巴塞羅那(色塊覆蓋)攻略

IQ使命2 

目錄:

本章規則:


就是要用所給的木塊覆蓋陰影區域,而且相鄰的木塊不能同色

(1)



(2)



(3)



(4)



(5)



(6)



除了第(1)(2)(6)關是隻有2種顏色的,其他29個關卡都有3種顏色

(7)



(8)



(9)



(10)


我找到2種解法:



(11)



(12)



(13)



(14)



(15)



(16)



(17)



(18)



(19)



(20)



(21)


說實話這一關難到我了,雖然找到了可以把木塊都放進陰影區域的方法,但是卻沒法使得相鄰色塊不同色。

所以我懷疑可能是因為慣性思維,所以我才想不到答案,只好藉助我的程式設計能力來解決。

程式說明:

6*6的正方形分為目標陰影區域和非陰影區域,色塊有3種顏色,8種形狀,除了1*1的小正方形和2*2的大正方形之外,還有4個L型的塊,以及1*2的橫塊和豎塊,依次編號1-8。

給每個塊標記一個核心點,用來表示塊的位置:


其中數字表示對形狀的編號

每個塊的位置用4個數字表示,空格用0表示,8個塊依次是

1,2,3,4

1,0,0,0

1,2,3,0

1,2,0,4

1,0,3,4

0,2,3,4

1,2,0,0

1,0,3,0

如此便記錄了每個塊的形狀,至於顏色就比較簡單了,用1,2,3表示3種顏色就可以了

程式碼:

#include
<iostream> using namespace std; int n;//一共n個塊,n<20 int color[20]; //block[i]=1、2、3,表示3種顏色 int shape[20];//shape[i]=1、2、3、4、5、6,表示6種顏色 int list[6][6];//0是陰影區域,-1不是 int di[5] = { -1,0, 0, 1, 1 };//行偏移 int dj[5] = { -1,0, 1, 0, 1 };//列偏移 int dx[5] = { -1, 0, 0, -1, 1 };//行偏移 int dy[5] = { -1, 1, -1, 0, 0 };//列偏移 int p[9
][4] = //指向di和dj { 0, 0, 0, 0, 1, 2, 3, 4, 1, 0, 0, 0, 1, 2, 3, 0, 1, 2, 0, 4, 1, 0, 3, 4, 0, 2, 3, 4, 1, 2, 0, 0, 1, 0, 3, 0 }; bool ok(int i, int j,int k) //能否在(i,j)放第k個塊 { int t[4], x, y; for (int a = 0; a < 4; a++)t[a] = p[shape[k]][a]; for (int a = 0; a < 4; a++) { if (t[a] == 0)continue; x = i + di[t[a]], y = j + dj[t[a]]; if (x<0 || x>5 || y<0 || y>5)return false; if (list[x][y])return false; //此處實際上是陣列的四層巢狀 for (int b = 1; b <= 4; b++) { x = i + di[t[a]] + dx[b], y = j + dj[t[a]] + dy[b]; if (x<0 || x>5 || y<0 || y>5)continue; if (list[x][y] == color[k])return false; } } return true; } bool trys(int k) //第k個塊能否放下去 { if (k > n) { cout << "答案(顏色)如下:\n"; for (int i = 0; i<6; i++) { for (int j = 0; j < 6; j++) { if (list[i][j] == -1)cout << " "; else cout << list[i][j] << " "; } cout << endl; } return true; } int t[4], x, y; for (int i = 0; i < 6; i++)for (int j = 0; j < 6; j++)if (ok(i, j, k)) { for (int i = 0; i < 4; i++)t[i] = p[shape[k]][i]; for (int a = 0; a < 4; a++) { if (t[a] == 0)continue; x = i + di[t[a]], y = j + dj[t[a]]; list[x][y] = color[k]; } if (trys(k + 1))return true; //深度優先搜尋 for (int a = 0; a < 4; a++)//回溯 { if (t[a] == 0)continue; x = i + di[t[a]], y = j + dj[t[a]]; list[x][y] = 0; } } return false; } int main() { n = 0; cout << "依次輸入各個塊的顏色,用1或2或3表示,以0結束\n"; while (cin >> color[++n])if (color[n] == 0)break; n--; cout << "依次輸入各個塊的形狀,用1-8表示\n"; for (int i = 1; i <= n; i++)cin >> shape[i]; cout << "依次輸入36個格子各自是否屬於目標陰影區域,0表示是,-1表示不是\n"; for (int i = 0; i < 6; i++)for (int j = 0; j < 6; j++)cin >> list[i][j]; trys(1); return 0; }

輸入:

1 2 1 2 2 3 1 2 3 3 1 0
5 2 3 2 1 5 2 3 6 5 4
0-1-1-1-1-1
0 0 0 0-1-1
0 0 0 0 0-1
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0

執行結果:


所以對應的答案就是:


從這張圖可以看出,在慣性思維的影響下,很難找到這個答案。至於有沒有其他答案就不清楚了,可以改一下程式碼變成求所有答案的程式,不過我認為沒必要。

(22)



(23)



(24)



(25)



(26)


(27)



(28)



(29)



(30)



(31)



(32)



成就:


the virtuoso of the mosaic 通關即可

the expert on lizard matters 收集所有隱藏在木塊下的蜥蜴(蜥蜴共有5個,分別在第1、5、9、13、16關

the art of doubleness 用2種解法完成同一關(如上我給出了第10關的2種解法)

相關推薦

IQ使命2 Barcelona 巴塞羅那色塊覆蓋

IQ使命2  目錄: 本章規則: 就是要用所給的木塊覆蓋陰影區域,而且相鄰的木塊不能同色 (1) (2) (3) (4) (5) (6) 除了第(1)(

IQ使命 Monte Carlo 蒙特卡洛推箱子

IQ使命 目錄: 本章規則: 規則裡面有3點,(1)白的和紅的可以推白的和黃的(2)黃的可以跳過任意箱子(3)紅的不能被推動 (1) (2) (3)

IQ使命2 Tokyo 東京跳棋

IQ使命2  目錄: 本章規則: 白子可以跳過1個棋子,黑子可以跳過1個或多個棋子,把所有的棋子都放進洞裡即可 (1) (2) 每個洞的周圍有2-4個格子,其中有0-4個格子裡面有

IQ使命 Marrakech 馬拉喀什六邊形圖案

IQ使命 目錄: 本章規則: 就是選擇一個球(有7個選擇),點選這個球它周圍的6個球就會順時針轉動60度完成一次輪換,最終要得到給定的圖樣。 編號: 因為只有7種操作,分別是點

IQ使命 London 倫敦一筆畫

IQ使命 目錄: 本章規則: 就是一筆畫 一筆畫問題本身非常簡單,如果加了一些特殊規則才會變得複雜,如點選開啟連結 本章只是最基本的一筆畫問題,所以很簡單,只需要2步。 第一步,

IQ使命2 Tikal 提卡爾旋轉的通道

IQ使命2  目錄: 本章規則: 把硬幣移入洞內,如果移動到帶有旋轉箭頭的格子,這個格子就會按照箭頭的方向旋轉90° (1) 右上下右 (2) 紅色的格子會全部一起旋轉 左下上左上 (3) 左下右左上下右右右上左 (4) 左上下左下上右下 (5)

IQ使命 Antwerp 安特衛普選寶石放木塊

IQ使命 目錄: 本章規則: 簡單說來規則就是,在n*n的棋盤上放著n種顏色的寶石,每種顏色都有的寶石都有n個, 要選擇一種寶石留下,其他的寶石全部用所給木塊覆蓋(所給木塊的總長

IQ使命 Luxor 埃及盧克索華容道

IQ使命 目錄: 華容道分類: 華容道可以分三大類,一類是正宗的三國華容道,一類是汽車華容道,還有其他變種華容道。 (1)三國華容道 三國華容道有5行4列,有曹操、五虎將和4個士

數據結構 集合_集合實例集合覆蓋

不存在 人員 list 組成 elm != 文件 mem 組合數 集合覆蓋是一種優化求解問題,對很多組合數學和資源選擇問題給出了很好的抽象模型。 問題如下:給定一個集合S,集合P由集合S的子集A1到An組成,集合C由集合P中的一個或多個子集組成。如果S中的每個成員都包含在C

2.23——2.25find命令上中下2.26 文件名後綴

find命令2.23 find命令(上)快捷鍵:Ctrl + l :清屏Ctrl + d :退出終端(相當於執行了:exit 或logout)Ctrl + c : 強制中斷Ctrl + u : 在命令輸入行,刪除光標前的字符串Ctrl + e : 光標移到末尾Ctrl + a : 光標移到開始which

ASP.NET Core 2 學習筆記十二REST-Like API

light namespace strong postman space 新增 html move engine Restful幾乎已算是API設計的標準,通過HTTP Method區分新增(Create)、查詢(Read)、修改(Update)和刪除(Delete),簡稱

ASP.NET Core 2 學習筆記十四Filters

span ans 黃色 返回 lec red addm spn using 原文:ASP.NET Core 2 學習筆記(十四)FiltersFilter是延續ASP.NET MVC的產物,同樣保留了五種的Filter,分別是Authorization Filter、Res

ASP.NET Core 2 學習筆記十一Cookies & Session

自動 asp Go 內存 rtu serialize .html call names 原文:ASP.NET Core 2 學習筆記(十一)Cookies & Session基本上HTTP是沒有記錄狀態的協定,但可以通過Cookies將Request來源區分出來,並

【Codeforces】Codeforces Round #492 (Div. 2) [Thanks, uDebug!] Contest 996

spl === bsp -- href 分享 printf cli 位置 題目 傳送門:QWQ A:A - Hit the Lottery 分析: 大水題 模擬 代碼: #include <bits/stdc++.h&g

數組排序-----2.快速排序遞歸

比較 temp quick func 個數 ole length int emp /** 先去找數組中間一項,把這一項拿出來; 用拿出之後的數組中的每一項跟 拿出的這一項比較;比這項大的放到一個數組; 小的放到另外一個數組* 接著對著兩個數組做上述同樣的操作;* */ fu

Codeforces Round #106 (Div. 2) Coloring Brackets區間DP

strlen 括號序列 pre names clas 依賴 return stack pri 題意:給你一組括號序列,讓你進行染色,對於每個括號,有無色,紅色,藍色三種方案。染色需要滿足這樣的條件:互相匹配的括號,有且只有一個有顏色,相鄰的括號不能顏色相同(可以同為無色),

7-2 符號配對 20 分

sel ini sed double strong alt 輸入格式 相差 def 題目:   請編寫程序檢查C語言源程序中下列符號是否配對:/*與*/、(與)、[與]、{與}。 輸入格式: 輸入為一個C語言源程序。當讀到某一行中只有一個句點.和一個回車的時候,標誌著輸入結

語句覆蓋、條件覆蓋分支覆蓋、判定覆蓋、條件-判定覆蓋、組合覆蓋、路徑覆蓋 的區別

文章轉自:https://blog.csdn.net/virus2014/article/details/51217026   1語句覆蓋 使所有的判斷語句都能執行一次的條件案例,例如有兩個if語句,那麼就至少需要兩個測試用例   2判定覆蓋(分支覆蓋)

第三章棧作業題2-棧及其應用-計算機17級 7-2 符號配對 20 分

7-2 符號配對 (20 分) 請編寫程式檢查C語言源程式中下列符號是否配對:/*與*/、(與)、[與]、{與}。 輸入格式: 輸入為一個C語言源程式。當讀到某一行中只有一個句點.和一個回車的時候,標誌著輸入結束。程式中需要檢查配對的符號不超過100個。 輸出

第六章樹和二叉樹--樹和森林-計算機17級 7-2 家譜處理 30 分

7-2 家譜處理 (30 分) 人類學研究對於家族很感興趣,於是研究人員蒐集了一些家族的家譜進行研究。實驗中,使用計算機處理家譜。為了實現這個目的,研究人員將家譜轉換為文字檔案。下面為家譜文字檔案的例項: John Robert Frank And