hdu2553 N皇后問題 回溯

2021-08-26 20:08:39 字數 897 閱讀 9975

第一次寫回溯,給出回溯定義。

個人理解:

類似於遞迴,但要檢查所有的狀態。

權威解釋:

題意:中文版不解釋。

分析:每個皇后不能在同行,同列,同斜線(左斜,右斜),則可以按行或者列去試探。按行放置不會橫向攻擊,按列放置不會縱向攻擊。

其中對角線與行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,表示棋盤和皇后的數量 如...