基於全排列的N皇后暴力

2021-10-06 15:02:23 字數 875 閱讀 4377

n皇后是演算法的經典問題,以下提供一種基於全排列的n皇后的解法。

首先,n皇后的起始要求是指的是 不能有任意兩個皇后是同行、同列、同乙個斜排。所以可以很自然的聯想到全排列來解決這個問題。

例如,1 2 3的全排列有1 2 3,1 3 2,2 1 3,2 3 1,3 2 1,3 1 2六種。它們可以看做是六種皇后擺放的位置描述

舉個栗子,1 3 2 可以看做第一行第一列放置乙個皇后,第二行第三列放置乙個皇后,第三行第二列放置乙個皇后。3 1 2也可以看做是第一行第三列放置乙個皇后,第二行第一列放置乙個皇后,第三行第二列放置乙個皇后(這只是舉個例子,實際上三皇后是不存在可以放置的情況的)。以此類推,我們只需要知道我們想要找的皇后的個數,然後再輸出這個個數的全排列。全排列所代表的位置資訊肯定不是同行同列的,那麼只需要繼續判定任意兩個皇后是否是同一斜排即可。

#include

#include

using

namespace std;

const

int maxn =

1010

;int n,counts =

0,p[maxn]

;bool hashtable[maxn]=;

void

generatep

(int index)}if

(flag) counts ++

;return;}

for(

int x =

1;x <= n;x ++)}

}int

main()

/*sample input: 8

sample output: 92

*/

用全排列解決N皇后問題(暴力法)

為八皇后問題,count為最後可行的方案數,共92種 要解決n皇后,只需要修改部分引數 include include include void printarray int a,int p,int q printf n void swap int a,int p,int q void perm i...

遞迴 全排列 N皇后

遞迴求出全排列,如輸出1到5的全排列 include const int maxn 11 int n,p maxn p存放已經排進來的數,n即為要求輸出1 n的全排列 bool hashtable maxn void generatep int index printf n return for i...

寒假 全排列與n皇后

遞迴很久之前就學過了,主要包括兩個重要點 1.遞迴邊界 2.遞迴式 例如斐波那契數列 漢諾塔等就可以很好處理。這次要記錄的是全排列和八皇后問題。全排列就是給定幾個正數,按順序排列不重複。例如 123 132 213 231 312 321 這就是1 2 3三個數的全排列。如何利用遞迴來實現呢?記當前...