回溯法 求解皇后問題

2021-10-04 22:20:19 字數 805 閱讀 8791

#include

#include

using

namespace std;

static

char queen[8]

[8];

//建立乙個棋盤

static

int a[8]

;static

int b[15]

;static

int c[15]

;static

int iqueennum =0;

//記錄總的棋盤狀態數

voidqu(

int i)

;//引數i代表行

voidqu(

int i)

cout<<

"\n\n";}

//如果前次的皇后放置導致後面的放置無論如何都不能滿足要求,則回溯,重置

queen[i]

[icolumn]

='*'

; a[icolumn]=0

; b[i - icolumn +7]

=0; c[i + icolumn]=0

;}}}

intmain()

//主、從對角線標記初始化,表示沒有衝突

for(iline =

0;iline <

15;iline++

) b[iline]

= c[iline]=0

;qu(0

);system

("pause");

return0;

}

回溯法求解8皇后問題

問題描述 在乙個8 8西洋棋盤上,有8個皇后,每個皇后佔一格 要求皇后間不會出現相互攻擊的現象,即不能有兩個皇后處在同一行 同一列或同一對角線上 問共有多少種不同的擺放方法?本解法採用回溯遞迴法,容易理解,首先在棋盤上擺第乙個皇后,然後擺第二個,每擺乙個皇后則判斷位置是否合法。如果合法,則擺下乙個皇...

回溯法求解N皇后問題。

n皇后問題就是 不存在兩個皇后同行或同列,或在同一斜線上。如下圖所示。黑色塊表示其中乙個皇后放在了第二行,第三列。這時,只有綠色圈圈才能放其他的皇后。回溯法的基本思想 確定了解空間的組織結構後,回溯法就從開始結點 根結點 出發,以深度優先的方式搜尋整個解空間。這個開始結點就成為乙個活結點,同時也成為...

回溯法求解n皇后問題

皇后問題 由n n個方塊排成n行n列的正方形稱為 n元棋盤 如果兩個皇后位於棋盤上的同一行或同一列或同一對角線上,則稱她們為互相攻擊,現要求找使n元棋盤上的n個皇后互不攻擊的所有布局。假設棋盤上每一行放置乙個皇后,分別用自然數0,1,2,n 1。首先定義乙個長度為n的一維陣列q,其中每乙個元素去q ...