N皇后問題(回溯做法)

2022-08-21 21:39:14 字數 812 閱讀 1524

相信大家都聽過經典的「八皇后」問題吧?這個遊戲要求在乙個8×8的棋盤上放置8個皇后,使8個皇后互相不攻擊(攻擊的含義是有兩個皇后在同一行或同一列或同一對角線上)。

桐桐對這個遊戲很感興趣,也很快解決了這個問題。可是,他想為自己增加一點難度,於是他想求出n皇后的解的情況。

你能幫助她嗎?

輸入格式:

一行,僅有乙個數n(1≤n≤14),表示為n皇后問題。

輸出格式:

輸出僅有乙個數,表示n皇后時問題的解法總數。

輸入樣例:

8

輸出樣例:

92

首先我們想到用二維陣列做,但是二維陣列肯定會超時,所以我們用降維做法,

注:(沒有用對稱的**):

沒有運用對稱必超時

可能13皇后都過不了.....

#include

using namespace std;

int q[100][100],box,n;

void queen(int k)

for(int i=1;i<=n;i++)}}

int main()

for(int i=1;i<=n;i++)

}}void queen2(int

k)

for(int i=1;i<=n/2;i++)

}}int

main()

if(n%2==1)//

當n為奇數時

cout

}

回溯 n皇后問題

思想 用回溯方法求解,首先要分析問題的求解空間。可用一棵n叉樹表示這個問題的求解空間,在回溯遍歷這個課二叉樹的過程中形成合理的解。對於這棵n叉樹,列序號i 0 n 1 是它的孩子,而每個孩子都有深度為n的子樹 包括自身 這些子樹的層次是n個皇后 也代表每個皇后的行序號,因為不同的皇后肯定不在同一行 ...

n皇后問題(回溯)

problem description 在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的n,求出有多少種合法的放置方法。input 共有若干行,每行乙個正整數n 10,表示棋盤和皇后的數量 如...

回溯 N皇后問題

會下西洋棋的人都很清楚 皇后可以在橫 豎 斜線上不限步數地吃掉其他棋子。如何將8個皇后放在棋盤上 有8 8個方格 使它們誰也不能被吃掉!這就是著名的八皇后問題。對於某個滿足要求的8皇后的擺放方法,定義乙個皇后串a與之對應,即a b1b2 b8,其中bi為相應擺法中第i行皇后所處的列數。已經知道8皇后...