命運2異星噬菌體遺失區(qū)域步驟謎題背后原理
(我嘗試用算法實現(xiàn)這個問題,但是失敗了,希望有更好思路的朋友給予建議,謝謝。歡迎指出文章存在的疏漏或是錯誤)
該難題來源于命運2中異域武器異星噬菌體獲取過程中頗為有趣的一個步驟。

玩家將看到一面由九宮格組成的謎題。九宮格中每格存在一個圖案,圖案共有四種。當(dāng)玩家點擊某一格時該格所在的行與列包括的所有圖案將發(fā)生順序的改變,即所有涉及圖案將變?yōu)槠漤樞虻暮笠粋€。玩家的目標為將所有九宮格圖案轉(zhuǎn)變?yōu)樯戏剿付ǖ膱D案。
我們可以簡化這個步驟。
由于圖案僅有四種,可以將圖案抽象為1、2、3、4。
假設(shè)目前的九宮格狀態(tài)如下:
1?1?1
1?1?1
1?1?1
如果我們點擊中間的圖案,九宮格將變?yōu)槿缦碌男问剑?/p>
1?2?1
2?2?2
1?2?1
注意:當(dāng)前圖案為4時,點擊該圖案將基于順序回到1。
?
假設(shè)我們需要下述九宮格中的圖案全部變?yōu)?。
4?4?4
4?1?1
4?1?1
只需要點擊第一個格子即可達成我們的目標。
了解九宮格的基本運作邏輯后,如何解開這個謎題就等同于如何通過有限的步驟將一個由隨機圖案的九宮格轉(zhuǎn)變?yōu)槿赡繕藞D案所組成的狀態(tài)。
由于圖案僅有四種變化,即對一個圖案點擊5次是沒有意義的,結(jié)果將與點擊1次的結(jié)果相同。對同一圖案點擊四次時,圖案將恢復(fù)至原本的樣子。
該謎題可以簡單抽象為一個數(shù)學(xué)問題。九宮格可以將其抽象為一個3行3列的矩陣。
而對圖案的點擊,可以看作將圖案所在的行與列結(jié)果都加1。
1?1?1
1?1?1
1?1?1
對于第一個圖案進行操作,等同于第1行與第1列均加1,得到如下結(jié)果
2?2?2
2?1?1
2?1?1
也就是說,選擇第二個圖案,意味著矩陣的第1行與第2列均加1。
以此類推:我們對矩陣所做的變化必定屬于如下9種情況。
m1
1 1 1
1? ? ??
1? ? ??
?
m2
1?1?1
? ? ? 1? ? ??
? ?? ?1? ? ??
m3
1?1?1
? ? ? ? ? ??1? ????
? ? ? ? ? ?1? ? ?
m4
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1? ??
? ? 1?1 1? ? ?
1? ? ??
m5
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1? ??
? ? 1?1 1? ? ?
?1??
m6
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ??1? ??
? ? 1?1 1? ? ?
? ? ?? 1??
m7
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??1? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1 1 1??
m8
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 1
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??1 1?1??
m9
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ?1? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ?1
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??1 1?1??
與魔方類似,兩次操作互換順序得到相同的結(jié)果是一致的。不論我們先選擇圖案1后選擇圖案2還是先選擇圖案2后選擇圖案1,對于九宮格所做的變化是相同的。
小時候常見的圖畫冊迷宮問題,一個常見的解法是,從出口走向入口。由于必然存在一條通路,出口走向入口能夠排除掉部分不需要的死路。
而九宮格謎題也是如此,通過將目標的圖案所構(gòu)成的矩陣,減去初始的矩陣狀態(tài)即可得到所有對于圖案造成改變的狀態(tài)的和。
對于一個目標為圖案3的九宮格
3?3?3
3?3?3
3?3?3
如果初始的九宮格狀態(tài)為
1?1?1
1?3?3
1?3?3
所求差所得到的差值矩陣
2?2?2
2? ? ??
?2? ? ???
即為解密步驟對矩陣造成的所有狀態(tài)變化的和。結(jié)果說明對圖案1操作2次即可得到所求結(jié)果。
?
但假設(shè)目標結(jié)果為
1 1 1
1 1 1
1 1 1
而當(dāng)前矩陣為
4 4 4
4 4 4
4 4 4
將如何求得狀態(tài)變化呢?
上文可知,對一個圖案操作4次造成的影響相同。
即
5 5 5
5 5 5
5 5 5
與全1表示的矩陣對九宮格造成的影響完全等同。(該矩陣中數(shù)值5表示操作次數(shù))
由于圖案以4為一個周期,即所有對4取余相同的操作數(shù)造成的影響是相同的。即操作2次與6次效果一樣,操作3次與7次效果一樣,以此類推。
可以通過如下方程式得到矩陣的狀態(tài)變化:
M = 矩陣變化 =(目標矩陣 + 4 - 初始矩陣) % 4 (%表示取余數(shù))
?
我們將上述矩陣的9種形態(tài)變化命名為矩陣m1,m2,m3,...,m9。
該問題最終可以抽象為下述九元一次方程組
x1*m1 + x2*m2 + x3*m3 + x4*m4 + x5*m5 + x6*m6 + x7*m7 + x8*m8 + x9*m9 = M
其中xi(i=1,2,3…, 9)∈{1,2,3,4}(x只可能取1,2,3,4這一個值)
該方程式的解即為解答。
如x1=1,x2=…=x9=0,只需對第一個格子操作一次即可得到所求結(jié)果。