馬的棋盤遍歷的一個近似算法

 
馬的棋盤遍歷的近似算法
國際象棋中的馬的遍歷問題爲:國際象棋中的馬能否按照馬步訪問每一格點一次,最後再回到原地?由於國際象棋中的馬又稱爲騎士,國際象棋中的馬的遍歷問題也稱爲騎士遍歷問題。
在國際象棋棋盤中,騎士在選擇下一個環遊點時,共有8種可能的方案(如圖所示)。除開其中已經遊歷的格點和棋盤外的格點,騎士一般還存在多種方案可供選擇。對於每一個候選的格點,與之馬步相連而還沒有遊歷的棋盤內格點數是不相同的。如果騎士選擇其中一個與外部聯繫最少的格點首先遊歷,那麼,他有可能走的更遠。因爲對於當前與騎士馬步相連的其它格點來說,由於它們與外界聯繫較多,以後還有機會通過其他格點進一步訪問到,而對於與外界聯繫較少的格點,如果不立即訪問,以後很難有機會進一步訪問到。
                                         2                   1
 

                           3                                               0
 
                                                   *
 

                           4                                               7
 
 
                                         5                   6
形式化來看,假設一點(i,j)是否被訪問用一個標記數組Travel[i][j]來表示,Travel[i][j]=1表示(i,j)已訪問,Travel[i][j]=0表示(i,j)沒被訪問。對於一個格點(i,j),與之相連的格點爲(i+x,j+y),其中x、y可能的組合如下:
 
             遍歷點    0     1     2     3     4     5     6     7
              x             2     1     -1    -2    -2    -1    1     2
              y             1     2     2     1     -1    -2    -2    -1
 
處於(i,j)點的騎士下一個可能的遍歷點構成的集合爲
             P(i,j)={(i’,j’)|(i’,j’)與(i,j)馬步相連,且Travel[i’][j’]=0,且(i’,j’)在棋盤內}
對於P(i,j)中的每一個元素(i’,j’),計算P(i’,j’)中的元素個數,若其中某個(i”,j”),P(i”,j”)中所含的元素個數最少,則選擇(i”,j”)爲下一個遍歷點。
     騎士能走多遠,很大程度上依賴於初始位置的選擇。對於8×8的棋盤,初始位置可以爲(0,0)、(0,1)、(0,2)、(0,3)、(1,1)、(1,2)、(1,3)、(2,2)、(2,3)和(3,3),由棋盤的對稱性,選擇其它格點作爲初始點沒有什麼新鮮性。當然,由於在騎士選擇下一步遊歷點時,滿足條件的(i”,j”)可能不只一個,而在選擇時又總是選其中編號最大或最小的格點,這實際上是爲騎士的選擇引入了某種方向性,也可以說帶有了某種偏見,這種偏見會破壞初始點的對稱性,即在棋盤對稱的兩個初始點,它們的解不是對稱的。 
    爲了避開這種偏見,也可以從滿足條件的一系列點中進行隨機選擇。當然,也可以將這種思路與回溯法結合在一起使用。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章