演算法筆記 072 N皇后問題(Java)

2021-09-25 00:27:24 字數 1133 閱讀 8155

目錄

1 問題描述

2 解決方案

把n個皇后放在乙個

n*n的棋盤上,使得任何兩個皇后都不能相互攻擊,即它們不能同行,不能同列,也不能位於同一條對角線上。

本文採用全排列的方法,從n個皇后的全排列中尋找符合規則的皇后排列。

為什麼這裡是說 全排列呢?因為在n皇后問題中,棋盤每一行只准放乙個皇后,且每一行的皇后必定要選一列。這個問題就相當於求取

1~n個數字的全排列,假設全排列中一種排列方案中第乙個數為

x,則在棋盤第一行位置為第

x列放乙個皇后,其第

i個位置的數

y就為棋盤第

i行的第

y列放著乙個皇后。

那麼既然全排列能夠得到,就要除去其中不符合條件的排列情況,此時只需要給相應排列加乙個判斷條件即可,符合條件的就輸出這個排列,否則進入下乙個排列判斷。

具體**如下:

package

com.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 3 

3 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行可以放置皇后的所在列數,根據任...