這裡我用乙個類來模擬整個問題求解過程。 問題的核心部分: 怎樣儲存n個皇后,另乙個是如何判別當前位置的皇后能否插入到棋盤中
針對這兩個問題,可以採取用遞迴的方法解決。 首先可以用乙個維位陣列 ,來儲存每一行皇后放置的「列數」。
另外就是要了解到使用乙個判別式,來判別當前要插入的位置是否處在 已經插入的皇后的對角線上。
有了這兩個基本的解決方法後,就可以使用遞迴來求解n皇后的排列方法,及個數。 **如下
#include
#include
using namespace std;
class queen;
queen::queen(int x)
bool queen::insert(int k,int i)
return true;
}void queen::print()
void queen::dqueen(int k)
else dqueen(k+1);//否則繼續插入}}
}void queen::show()
void main()
N皇后問題的遞迴求解
n皇后問題 20 分 在n n的方格棋盤上,放置n個皇后,要求每個皇后不同行,不同列,不同左右對角線。其中n不超過10。要求 輸出所有的解。輸入格式 輸入n輸出格式 逐行輸出每一種解,用每個皇后的位置座標表示,每個位置座標之後均有乙個空格符,輸出最後一行為空行。輸入樣例 在這裡給出一組輸入。例如 6...
求解n皇后問題
n皇后問題 回溯法 遞迴的邏輯中一般有兩個重要的概念 1.遞迴邊界 2.遞迴式 1.問題描述 在n n格的西洋棋上擺放n個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。遞迴思想 int count 0 void generatep int index i...
n皇后問題求解
在乙個n n的棋盤上放置n個王后,使得每個王后不會相互攻擊,即任意兩個王后不在同一行 同一列 同一對角線上,輸出所有的放置方式。輸入n,表示棋盤大小。深度優先搜尋 dfs 列舉第i個王后的放法,再列舉第i 1個王后的放置方法,直至放置完所有棋子,檢查放置方式是否合法,若合法則輸出 不合法則返回,嘗試...