問題:n行n列的棋盤,放n個皇后,問對於給定的n,求出有多少種合法的放置方法。
重點:即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。否則會發生互相攻擊。
思路:
1。首先生成map【maxn】【maxn】**,並對其進行初始化,可以放棋的地方初始化為0;
2。每放乙個皇后,這個皇后所在的橫排、豎排、斜排都不能再放其他皇后。記為i;
3。用遞迴,可以遍歷所以情況,當放棋子的地方錯誤時,要對其上一步的標記進行更改,即變i為0;
#include
#include
#include
#include
using
namespace
std;
const
int maxn=12;
void fbs(int num);
intmap[maxn][maxn],t[maxn],ans,n;\\ans計數,放全域性變數好變化(^u^)ノ~yo
int main()
intq; while(~scanf("%d",&q),q)
printf("%d\n",t[q]);
return
0; }
end:結束了,加油啊~kkkkヾ(◍°∇°◍)ノ゙void fbs(int num)
for(int col=1;col<=n;++col)
fbs(num+1);
for(int i=1;i<=n;++i)\\下錯了,返回上一步,讓上一步的num換為可以下的0區域;}}
}
}
n皇后問題 遞迴
遞迴回溯深度優先搜尋解決n皇后問題 用三個陣列b,c,d分別記錄棋盤上的n個列,2n 1個主對角線和2n 1個負對角線的占用情況。用i,j表示皇后所在的行列,同一主對角線上的行列下標的差一樣,若用表示式i j編號,則是 n 1 n 1,所以用表示式i j n對主對角線編號,範圍是1 2n 1 同樣的...
遞迴 n皇后問題
在 n x n 的棋盤上面所有的皇后不能相互攻擊,即所有的皇后 既不在同一行 不在同一列,也不在同一對角線,如下圖所示 以 4 x 4 的棋盤舉例 但是要求求出 n x n 的棋盤上所有排法 n 皇后個數,代表 n x n 的棋盤 第一行 皇后的第一種排法 共 n 個元素,每個元素代表皇后 每行擺放...
遞迴 N皇后問題
在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的n,求出有多少種合法的放置方法。輸入乙個正整數n,則程式輸出n皇后問題的全部擺法。輸出結果裡的每一行都代表一種擺法。行裡的第i個數字如果是n則代...