回溯演算法之 N皇后問題

2021-06-05 04:32:24 字數 739 閱讀 5015

// n皇后

#include #include #define max 15

int n; //n queen

int cur; //cur row

int a[max]; //the ith row's queen put in the a[i]th column

int tot = 0; // total nums

//cur 為當前遍歷到的行。

//從第1~n列中選擇一列,使當前皇后放到此位置時,與已經放好的1~cur-1行的皇后不衝突(即不在同一行、同一列、兩個對角線上)

void search(int cur)

{ int i, j;

if (cur==n+1) //找到n個皇后的位置,列印出

{ for (i=1; i

注意到上面程式中判斷第i列是否能放當前cur行的皇后的效率比較低,可以改進。

用乙個全域性變數vis[2][ ] 來儲存某列、某主對角線、某副對角線已經被皇后占用。

這樣就可以直接判斷第i行是否可以放當前的皇后了。

void search2(int cur)

{ int i, j;

if (cur == n+1)

{ for (i=1; i

第一次寫這個程式時將迴圈計數變數i,j誤設定為全域性變數,導致程式執行結果不正確。這是乙個遞迴程式,i,j應該為區域性變數,才不會導致進一步遞迴時程式破壞上一次遞迴棧的區域性資料!!

回溯演算法之n皇后問題

n皇后問題 輸出8皇后問題所有結果。輸入 n 棋盤的行列 輸出 每個結果第一行是no n 的形式,n表示輸出的是第幾個結果 下面8行,每行8個字元,a 表示皇后,表示空格。不同的結果中,先輸出第乙個皇后位置靠前的結果 第乙個皇后位置相同,先輸出第二個皇后位置靠前的結果 依次類推。輸入樣例 8 輸出樣...

回溯 皇后 演算法筆記 回溯演算法 N皇后問題

n 皇后問題研究的是如何將 n 個皇后放置在 n n 的棋盤上,並且使皇后彼此之間不能相互攻擊。上圖為 8 皇后問題的一種解法。給定乙個整數 n,返回所有不同的 n 皇后問題的解決方案。每一種解法包含乙個明確的 n 皇后問題的棋子放置方案,該方案中 q 和 分別代表了皇后和空位。示例 輸入 4 輸出...

回溯演算法n皇后問題

這是一道考查應聘者綜合能力的問題,其中包含了演算法的設計 ui的設計 介面的設計等問題,當然在具體面試中沒有時間讓應聘者完成整個設計和編碼,但是面試官往往通過了解應聘者的設計思路和工作步驟來考查應聘者的能力。本節將具體分析這道程式設計題。所涉及到的知識點 回溯演算法 net桌面應用程式的ui設計 分...