八皇后問題 遞迴求解

2021-09-13 15:16:13 字數 1063 閱讀 2723

在西洋棋的棋盤上,按照西洋棋的規則,擺放8個皇后,使之「和平共處」。如圖所示,在3-d上有乙個皇后,則綠色區域中都不能再放置皇后了。

最暴力的方法就是使用八個for,但是很明顯,這種方法效率太低。

對於放置了皇后的位置,仔細觀察棋盤可以發現每一列(行)只能有乙個皇后,每乙個主(次)對角線上也只能有乙個皇后,這樣需要標記:行-row,列-col,主對角線-(n+row-col),次對角線-(row+col)

注意:關於對角線的一點說明:

#include

#include

using namespace std;

class eightqueen

~eightqueen()

intprocess()

void

calculate

(int

*path,

int row)

for(

int col =

0; col < nqueen; col++)}

} bool canlay

(int row,

int col)

void

print()

cout <<

"x "

;for

(int col = solution[i]

[row]+1

; col < nqueen; col++

) cout << endl;

} cout << endl << endl;}}

private:

int nqueen;

vector incolumn;

vector maindiagonal;

vector minordiagonal;

vector

int>

> solution;};

intmain()

八皇后問題 遞迴求解

八皇后問題簡述 在西洋棋中,皇后是最厲害的 這也就是大概為什麼不要得罪女人的原因 她可以吃掉任意與其所在列和行,以及對角線上的棋子。所以在8x8的棋盤上,安放8個皇后,使得不會相互攻擊,也就是安全的就變得極為重要。本文採用遞迴的方式,輸出所有的92種可能的方法。如下 include stdafx.h...

遞迴求解八皇后問題

題目 八皇后問題 在8 8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法 遞迴思路 在第1行安全位置放乙個棋子,在第2行安全位置放乙個棋子,以此類推,直到八行都放了棋子,第9行時退出遞迴過程。c 八皇后問題 在8 8格的西洋棋上擺放八個...

八皇后問題的遞迴求解

1.引子 中國有一句古話,叫做 不撞南牆不回頭 生動的說明了乙個人的固執,有點貶義,但是在軟體程式設計中,這種思路確是一種解決問題最簡單的演算法,它通過一種類似於蠻幹的思路,一步一步地往前走,每走一步都更靠近目標結果一些,直到遇到障礙物,我們才考慮往回走。然後再繼續嘗試向前。通過這樣的波浪式前進方法...