第一次寫回溯,給出回溯定義。
個人理解:
類似於遞迴,但要檢查所有的狀態。
權威解釋:
題意:中文版不解釋。
分析:每個皇后不能在同行,同列,同斜線(左斜,右斜),則可以按行或者列去試探。按行放置不會橫向攻擊,按列放置不會縱向攻擊。
其中對角線與行i,列j聯絡起來。
用cur表示當前行/列,col[cur]表示當前列/行,用cur-col[cur]的值表示當前的右斜線,cur+col[cur]的值表示當前的左斜線
皇后位於【cur,col[cur]】所在右斜線為cur-col[cur],左斜線為cur+col[cur]
eg:2行3列,cur=2,col[2]=3,所在右斜線是-1,左斜線是5.
右斜線 【不唯一】
0123
45-10
1234
-2-101
23-3-2-10
12-4-3
-2-101
-5-4
-3-2-10
左斜線【不唯一】 0
1234
5123
4562
3456
7345
6784
5678
9567
8910 **:
#include using namespace std;
int col[11]=;
int n;
int tot;
int search(int cur)
else for(i=0;i>n&&n!=0)
{// memset(col,0,sizeof(col));
// tot=0;
// search(0);//直接按行或者列放置。
cout<
HDU 2553 N皇后問題 (初試回溯)
time limit 1000ms memory limit 32768kb 64bit io format i64d i64u description 在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,...
HDU 2553 N皇后問題 回溯法
problem description 在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的n,求出有多少種合法的放置方法。include include include using namesp...
HDU 2553 N皇后問題 (DFS 回溯)
problem description 在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的n,求出有多少種合法的放置方法。input 共有若干行,每行乙個正整數n 10,表示棋盤和皇后的數量 如...