目錄1 問題描述
2 解決方案
把n個皇后放在乙個
n*n的棋盤上,使得任何兩個皇后都不能相互攻擊,即它們不能同行,不能同列,也不能位於同一條對角線上。
本文採用全排列的方法,從n個皇后的全排列中尋找符合規則的皇后排列。
為什麼這裡是說 全排列呢?因為在n皇后問題中,棋盤每一行只准放乙個皇后,且每一行的皇后必定要選一列。這個問題就相當於求取
1~n個數字的全排列,假設全排列中一種排列方案中第乙個數為
x,則在棋盤第一行位置為第
x列放乙個皇后,其第
i個位置的數
y就為棋盤第
i行的第
y列放著乙個皇后。
那麼既然全排列能夠得到,就要除去其中不符合條件的排列情況,此時只需要給相應排列加乙個判斷條件即可,符合條件的就輸出這個排列,否則進入下乙個排列判斷。
具體**如下:
packagecom.liuzhen.chapter12;
public
class
queenproblem
}return
true
; }
//交換陣列a中m位置和n位置上的值
public
void swap(int a, int m, int
n)
public
void printresult(int a, int
step)
else
}
}public
static
void
main(string args) ;
test.printresult(a, 0);
system.out.println("符合n皇后排序條件的排序方式個數為:"+count);
}}
執行結果:
2 4 1 33 1 4 2符合n皇后排序條件的排序方式個數為:2
《演算法筆記》n皇后問題
問題 n n的棋盤上放置n個皇后,使得n個皇后不能互相攻擊 不能在同一行 同一列 同一對角線上 思路 暴力 列舉1 n的全排列,判斷每個全排列是否合法 include include include using namespace std int n,count1 0 int p 110 bool ...
回溯 皇后 演算法筆記 回溯演算法 N皇后問題
n 皇后問題研究的是如何將 n 個皇后放置在 n n 的棋盤上,並且使皇后彼此之間不能相互攻擊。上圖為 8 皇后問題的一種解法。給定乙個整數 n,返回所有不同的 n 皇后問題的解決方案。每一種解法包含乙個明確的 n 皇后問題的棋子放置方案,該方案中 q 和 分別代表了皇后和空位。示例 輸入 4 輸出...
演算法 n皇后問題
題目描述 乙個 n n 的棋盤,要在上面放 n 個皇后。規則 兩個皇后之間如果是同列 同行 同對角線它們會互相攻擊。也就 是 說 棋盤上的任意兩個皇后不能為同列 同行 同對角線。演算法思想 q j 表示乙個解的空間即儲存一組可行解的陣列,j表示行數,q j 的值表示j行可以放置皇后的所在列數,根據任...