IQ使命2 Barcelona 巴塞羅那(色塊覆蓋)攻略
目錄:
本章規則:
就是要用所給的木塊覆蓋陰影區域,而且相鄰的木塊不能同色
(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