N皇后的遞迴和非遞迴實現

2022-03-04 05:10:25 字數 777 閱讀 1887

著名的八皇后問題大家應該都知道,不過以防萬一這裡還是再說一下:

八皇后問題是乙個以西洋棋為背景的問題其內容為求解如何能夠在 8×8 的西洋棋棋盤上放置八個皇后,使得任何乙個皇后都無法直接吃掉其他的皇后?即任意兩個皇后都不能處於同一條橫行、縱行或斜線上。

而n皇后顧名思義就是同樣的規則擴充套件到n個皇后。

在這裡給出兩種方法:

迭代:#include #include using namespace std;

const int maxn = 1005;

int data[maxn];//儲存過程資料

int count;//用於計數

bool check(int k)

if(data[k]<=n){

if(k == n){//找到解

for(int i=1 ; i<=n ; i++)cout<>n){

count = 0;

queen(n);

cout<#include using namespace std;

const int maxn = 1005;

int data[maxn];//儲存過程資料

int count;//用於計數

bool check(int k){//檢查當前點是否合格

for(int i=1 ; in){//找到解

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

cout<>n){

count = 0;

queen(n,1);

cout<

N皇后非遞迴實現

馬上上課了,以後有時間再細說。回溯 偷個懶,從老師ppt上拷過來 狀態樹 解空間樹 回溯法的求解過程實質上是乙個先序遍歷一顆狀態樹的過程,只是這棵狀態樹不是預先建立的,而是隱含在遍歷過程中。可以通過畫乙個四皇后的解空間樹來很嗨的理解,理解回溯的過程,有時間就更 約束函式 節點與解 完全解 部 死節點...

N皇后問題(遞迴與非遞迴解法)

最近演算法老師講到了 皇后問題,我順便在這邊總結一下他的思路,主要還是深搜加剪枝 解題思路 用陣列 儲存每個皇后在下標行中的位置 即列 然後進行深搜加剪枝判斷,如果不符合條件了,則回朔 思路很簡單,下面的 包含兩種解法 include include define m 8 修改此處改變皇后的基數 b...

N皇后問題的遞迴與非遞迴解法

n皇后問題 n皇后問題是將n個皇后放置在n n的棋盤上,皇后彼此之間不能相互攻擊。給定乙個整數n,返回所有不同的n皇后問題的解決方案。每個解決方案包含乙個明確的n皇后放置布局,其中 q 和 分別表示乙個女王和乙個空位置。樣例對於4皇后問題存在兩種解決的方案 q.solution 1 q q.q.q....