趣談八皇后問題

2021-09-24 07:43:39 字數 1454 閱讀 2488

money is not everything. there's mastercard.

金錢不是萬能的, 有時還需要信用卡。

大話西遊之月光寶盒這部電影已經刷了n遍了。每一次看都有每一次的感悟。如果時光可以到倒流,我當初就不應該。。。 悔不當初,悔不當初。

雖然世界上沒有後悔藥,但是演算法界卻是有後悔藥的,呢就是---回溯演算法。人生不能時光倒流,呢我讓我的演算法時光倒流。

八皇后問題最早是由西洋棋棋手馬克斯·貝瑟爾於2023年提出的,現在都21世紀了,八皇后怎麼能滿足我,我決定實現乙個n皇后,我想要幾個皇后就要幾個皇后。

所有原始碼均已上傳至github:鏈結

家家有本難念的經,乙個皇后已經了不得了。這n皇后嘛,可得好好處理,不能讓她們打架。可以先宣告乙個大小為n的一維陣列,來儲存我的這n位皇后。然後分成n個階段。

大概思路就是這樣。

/**

* 皇后陣列

*/private int queens;

/*** n皇后

*/private int n;

/*** 擺法數量

*/private int count;

/*** 基於8皇后而衍生的n皇后

** @param n 皇后的數量

*/private solvenqueens(int n) 複製**

雖然**很精簡,但是關鍵就在於這個遞迴不好理解。迴圈裡套遞迴,很巧妙。需要一步一步跟一下就知道了。

一維陣列儲存的值是皇后的位置(0,n-1)。

預設是要從頭開始的,需要這麼呼叫該方法calnqueens(0)

private void calnqueens(int row) 

for (int col = 0; col < n; col++)

}}複製**

該方法需要判斷自己的橫豎排,左右對角線是否有皇后。

這裡為了便於理解,所以迴圈裡放著三個if。

private boolean issatisfy(int row, int col) 

return

true;

}複製**

private void printqueens(int queens) 

system.out.println();

}system.out.println();

++count;

}複製**

public static void main(string args) 複製**

4皇后八皇后(這裡是包含了旋轉和對稱的解的解,否則是12種擺法)

您的點讚和關注是對我最大的支援,謝謝!

八皇后問題

八皇后問題 ackarlix 八皇后問題是乙個古老而著名的問題,是回溯演算法的典型例題。該問題是十九世紀著名的數學家高斯 1850 年提出 在 8x8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。高斯認為有 76種方案。1854 年在...

八皇后問題

include iostream.h int a 8 8 棋盤 int r 8 結果 int i,j int count 0 void init i j 0 int judge int x,int y for int mi x 1,mj y mi 1 mi for int ri x 1,rj y 1...

八皇后問題

package quess 由於八個皇后的任意兩個不能處在同一行,那麼這肯定是每乙個皇后佔據一行。於是我們可以定義乙個陣列columnindex 8 陣列中第i個數字表示位於第i行的皇后的列號。先把columnindex的八個數字分別用0 7初始化,接下來我們要做的事情就是對陣列columninde...