time limit:1000msmemory limit:32768kb64bit io format:%i64d & %i64u
description
在n*n的方格棋盤放置了n個皇后,使得它們不相互攻擊(即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。
你的任務是,對於給定的n,求出有多少種合法的放置方法。
input
共有若干行,每行乙個正整數n≤10,表示棋盤和皇后的數量;如果n=0,表示結束。
output
共有若干行,每行乙個正整數,表示對應輸入行的皇后的不同放置數量。
sample input
1850
sample output
19210
再使用dfs的時候,遞迴函式降不再遞迴呼叫它自身,而是返回上一層呼叫,我們稱這種現象為回溯。
//author : qjs
//first edit time: 2014-08-04 13:24
//last edit time: 2014-08-04 13:24
#include #include using namespace std;
int c[1000];
int tot;
void search(int cur);
int n;
int ok;
int main()
return 0;
}void search(int cur)
else
}if (ok)//如果放置合法。則繼續遞迴。
}}}
這個第二種方法,效率比第一種高。完美的把回溯法表現出來。
//author : qjs
//first edit time: 2014-08-04 13:24
//last edit time: 2014-08-04 13:24
#include #include using namespace std;
int vis[2][100];
int tot;
void search(int cur);
int n;
int ok;
int main()
return 0;
}void search(int cur)
{ int i,j;
if(cur==n)
tot++;
else for(i=0;i
回溯法之n皇后問題
一 問題 在nxn格的棋盤上放置彼此不受攻擊的n格皇后。按照西洋棋的規則,皇后可以攻擊與之處在同一行或同一列或同一斜線上的棋子。n後問題等價於在nxn格的棋盤上放置n個皇后,任何2個皇后不放在同一行或同一列或同一斜線上。二 演算法與分析 用陣列x i 1 i n 表示n後問題的解。其中x i 表示皇...
N 皇后問題 回溯法
n 皇后問題 在 n n 的棋盤上放置彼此不受攻擊的 n 個皇后,任意兩個皇后不同行 不同列 不同斜線。思路 1.因為皇后不能同行,所以,在每一行放置乙個皇后就行 2.當在一行放置皇后的時候 1 順序檢查這一行每乙個位置是否和上面所有的皇后,只要有乙個同列或者在斜線上就不能放置 若找到乙個滿足的,放...
回溯法 n皇后問題
問題描述 在nxn的棋盤上,放置彼此不受攻擊的n個皇后。規則 皇后可以攻擊與之在同一行,同一列,同一斜線上的棋子。以行為主導 不用再判斷是否同行了 演算法設計 1 定義問題的解空間 問題解的形式為n元組 分量xi表示第i個皇后放置在第i行,第xi列。2 解空間的組織結構 m叉樹 3 搜尋解空間 約束...