>從八數碼問題入手
我們首先從經典的八數碼問題入手,即對於八數碼問題的任意乙個排列是否有解?有解的條件是什麼?
我在網上搜了半天,找到乙個十分簡潔的結論。八數碼問題原始狀態如下:
1 2 3
4 5 6
7 8為了方便討論,我們把它寫成一維的形式,並以0代替空格位置。那麼表示如下:
1 2 3 4 5 6 7 8 0
通過實驗得知,以下狀態是無解的(交換了前兩個數字1 2):
2 1 3 4 5 6 7 8 0
八數碼問題的有解無解的結論:
乙個狀態表示成一維的形式,求出除0之外所有數字的逆序數之和,也就是每個數字前面比它大的數字的個數的和,稱為這個狀態的逆序。
若兩個狀態的逆序奇偶性相同,則可相互到達,否則不可相互到達。
由於原始狀態的逆序為0(偶數),則逆序為偶數的狀態有解。
也就是說,逆序的奇偶將所有的狀態分為了兩個等價類,同乙個等價類中的狀態都可相互到達。
簡要說明一下:當左右移動空格時,逆序不變。當上下移動空格時,相當於將乙個數字向前(或向後)移動兩格,跳過的這兩個數字要麼都比它大(小),逆序可能±2;要麼乙個較大乙個較小,逆序不變。所以可得結論:只要是相互可達的兩個狀態,它們的逆序奇偶性相同。我想半天只能說明這個結論的必要性,詳細的證明請參考後面的附件。
>推廣二維n×n的棋盤 (poj 2893)
我們先來看看4×4的情況,同樣的思路,我們考慮移動空格時逆序的變化情況。
1 2 3 4
5 6 7 8
9 a b c
d e f
我們用字母a~f代替數字10~15。同樣地,當左右移動的時候,狀態的逆序不改變。而當上下移動的時候,相當於乙個數字跨過了另外三個格仔,它的逆序可能±3或±1,逆序的奇偶性必然改變。那麼又該如何
1 2 3 4
5 6 7 8
9 a b
c d e f
可以證明,以上狀態是乙個無解的狀態(將c移到了第四行)。該狀態的逆序為0,和原始狀態相同,但是它的空格位置在第三行。若將空格移到第四行,必然使得它的逆序±1或±3,奇偶性必然改變。所以它是乙個無解的狀態。
然而以下狀態就是乙個有解的狀態(交換了前兩個數字1 2):
2 1 3 4
5 6 7 8
9 a b
c d e f
這個狀態的逆序為1,和原始狀態奇偶性不同,而空格位置在第三行。由於空格每從第三行移動到第四行,奇偶性改變。則該狀態的可到達原始狀態。
通過觀察,得出以下結論:
n×n的棋盤,n為奇數時,與八數碼問題相同。
n為偶數時,空格每上下移動一次,奇偶性改變。稱空格位置所在的行到目標空格所在的行步數為空格的距離(不計左右距離),若兩個狀態的可相互到達,則有,兩個狀態的逆序奇偶性相同且空格距離為偶數,或者,逆序奇偶性不同且空格距離為奇數數。否則不能。
也就是說,當此表示式成立時,兩個狀態可相互到達:(狀態1的逆序數 + 空格距離)的奇偶性==狀態2奇偶性。
另外再詳細說明一下,無論n是奇數還是偶數,空格上下移動,相當於跨過n-1個格仔。那麼逆序的改變可能為一下值±n-1,±n-3,±n-5 …… ±n-2k-1。當n為奇數數時n-1為偶數,逆序改變可能為0;當n為偶數時n-1為奇數,逆序的改變不能為0,只能是奇數,所以沒上下移動一次奇偶性必然改變。
>推廣到三維n×n×n ( zju 2004 )
其實,三維的結論和二維的結論是一樣的。
考慮左右移動空格,逆序不變;同一層上下移動空格,跨過n-1個格仔;上下層移動空格,跨過n^2-1個格仔。
當n為奇數時,n-1和n^2-1均為偶數,也就是任意移動空格逆序奇偶性不變。那麼逆序奇偶性相同的兩個狀態可相互到達。
當n為偶數時,n-1和n^2-1均為奇數,也就是令空格位置到目標狀態空格位置的y z方向的距離之和,稱為空格距離。若空格距離為偶數,兩個逆序奇偶性相同的狀態可相互到達;若空格距離為奇數,兩個逆序奇偶性不同的狀態可相互到達。
八數碼問題有解的條件及其推廣
從八數碼問題入手 我們首先從經典的八數碼問題入手,即對於八數碼問題的任意乙個排列是否有解?有解的條件是什麼?我在網上搜了半天,找到乙個十分簡潔的結論。八數碼問題原始狀態如下 1 2 3 4 5 6 7 8 為了方便討論,我們把它寫成一維的形式,並以0代替空格位置。那麼表示如下 1 2 3 4 5 6...
八數碼的幾種做法的總結以及是否有解的判斷
經典的八數碼問題,這幾天嘗試了一些不同的做法,現在總結下。1.廣搜 雜湊 這是最容易想到的一種做法,雜湊的方法是康托展開,組合數學上有介紹。廣搜 雜湊 2.雙向廣搜 雜湊 雙向廣搜的複雜度大約是單向的一半,所以效率上會有不錯的提高。雙向廣搜 雜湊 3.a 雜湊 曼哈頓距離 用到廣搜,就可以想到能用經...
簡單的八數碼問題(BFS)
時間限制 1 sec 記憶體限制 256 mb 提交 9 解決 7 提交 狀態 討論版 在3 3的棋盤上,擺有八個棋子,每個棋子上標有1至8的某一數字。棋盤中留有乙個空格,空格用0來表示。空格周圍的棋子可以移到空格中。要求解的問題是 給出一種初始布局 初始狀態 和目標布局 為了使題目簡單,設目標狀態...