各大電腦公司 筆試及面試 題目 – 深信服(八皇后問題)

來源:互聯網
上載者:User

八皇后問題是一個以國際象棋為背景的問題:如何能夠在 8×8 的國際象棋棋盤上放置八個皇后,使得任何一個皇后都無法直接吃掉其他的皇后?為了達到此目的,任兩個皇后都不能處於同一條橫行、縱行或斜線上。八皇后問題可以推廣為更一般的n皇后擺放問題:這時棋盤的大小變為n×n,而皇后個數也變成n。若且唯若 n =
1 或 n ≥ 4 時問題有解。

在n×n格的棋盤上擺放n個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行、同一列或同一斜線上,求解滿足條件的棋盤布局。

n-皇后問題是典型的可以使用回溯演算法求解的問題。如果你明白了問題的具體執行過程,也就對該問題的特點有了把握,從而選擇合適的演算法去求解。

以8-皇后問題為例,假設皇后所在的行用變數row表示,對應的列使用數組column[row]表示。

使用回溯演算法執行的過程如下:

(1)第一次放置第1個皇后

將第1個皇后放在第0行第0列,即row=0,column[row]=column[0],:

第1個皇后放置在座標(0,0)處。

(2)第一次放置第2個皇后

因為第1個皇后已經放好,第1個皇后放置到第0行第0列,從第1個皇后下方的格子開始判斷。第2個皇后位於第1行,則row=1:

當column[row]=column[1]=0時,與第1個皇后在同一列上,衝突,繼續後移到下一列(即column[row]++);

當column[row]=column[1]=1時,與第1個皇后在同一對角線上,衝突,繼續後移到下一列(即column[row]++);

當column[row]=column[1]=2時,與第1個皇后不在同一行、同一列、同一對角線上,故放置第2個皇后。

第2個皇后放置在座標(1,2)處。

(3)第一次放置第3個皇后

因為第2個皇后已經放好,第2個皇后放置到第1行第2列,從第2個皇后下方的格子開始判斷。第3個皇后位於第2行,則row=2:

當column[row]=column[2]=0時,與第1個皇后在同一對角線上,衝突,繼續後移到下一列(即column[row]++);

當column[row]=column[2]=1時,與第2個皇后在同一對角線上,衝突,繼續後移到下一列(即column[row]++);

當column[row]=column[2]=2時,與第2個皇后在同一列上,衝突,繼續後移到下一列(即column[row]++);

當column[row]=column[2]=3時,與第2個皇后在同一對角線上,衝突,繼續後移到下一列(即column[row]++);

當column[row]=column[1]=4時,與第1、2個皇后不在同一行、同一列、同一對角線上,故放置第3個皇后。

第3個皇后放置在座標(2,4)處。

(4)第一次放置第4個皇后

第4個皇后放置在座標(3,1)處。

(5)第一次放置第5個皇后

第4個皇后放置在座標(4,3)處。其餘依次類推。

代碼如下:


備忘:轉載於 http://hi.baidu.com/shirdrn/blog/item/2720311b5cc970108618bfb1.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.