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

2021-10-01 18:37:54 字數 641 閱讀 7252

**為八皇后問題,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

(int a,

int p,

int q,

int*count)}if

(flag)

(*count)++;

}/*本段**用於判斷排列是否符合不在同一對角線(全排列必定不在同一行,

不在同一列,由i表示列號,a[i]表示行號,故只需要判斷是否在同一對角線)*/

else}}

intmain()

;perm

(a,0,7

,&count)

;printf

("%d"

,count)

;}

基於全排列的N皇后暴力

n皇后是演算法的經典問題,以下提供一種基於全排列的n皇后的解法。首先,n皇后的起始要求是指的是 不能有任意兩個皇后是同行 同列 同乙個斜排。所以可以很自然的聯想到全排列來解決這個問題。例如,1 2 3的全排列有1 2 3,1 3 2,2 1 3,2 3 1,3 2 1,3 1 2六種。它們可以看做是...

全排列問題與n皇后問題

全排列問題 基本思想 從遞迴的角度考慮,將 輸出從1 n的全排列 分為若干個子問題 輸出以1為開頭的全排列 輸出以2為開頭的全排列 於是不妨設定乙個陣列p,用來存放當前排列 再設定乙個雜湊陣列hashtable,其中hashtable x 當整數x已經在陣列p中時為true。遞迴邊界 當index達...

用試探回溯法解決N皇后問題

學校資料結構的課程實驗之一。資料結構 其實只用了乙個二維陣列 演算法 深度優先搜尋,試探回溯 需求分析 設計乙個在控制台視窗執行的 n皇后問題 解決方案生成器,要求實現以下功能 由n n個方塊排成n行n列的正方形稱為n元棋盤。如果兩個皇后位於n元棋盤上的同一行 同一列或同一對角線上,則稱它們在互相攻...