hdu2553 N皇后問題 dfs回溯剪枝 打表

2021-10-22 22:44:29 字數 1332 閱讀 9761

problem description

在n*n的方格棋盤放置了n個皇后,使得它們不相互攻擊(即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。

你的任務是,對於給定的n,求出有多少種合法的放置方法。

input

共有若干行,每行乙個正整數n≤10,表示棋盤和皇后的數量;如果n=0,表示結束。

output

共有若干行,每行乙個正整數,表示對應輸入行的皇后的不同放置數量。

sample input18

50sample output192

10解題思路:

這題我們用了:

if

(!col[y]

&&!duijiao1[x + y]

&&!duijiao2[x - y + n]

)

進行剪枝,但是沒用,還是超時,所以我們要用打表的方法,在main()中提取算好答案,然後儲存在陣列中,等讀取輸入後立刻輸出,而不是等輸入了n,在慢慢計算,會超時。

**如下:

#include

#include

using

namespace std;

int ans =0;

int n;

const

int n =

1010

;bool col[n]

, duijiao1[n]

, duijiao2[n]

;void

dfs(

int x)

for(

int y =

1; y <= n; y++)}

}int

main()

return0;

}

打表**:

#include

#include

using

namespace std;

int ans =0;

int n;

const

int n =

1010

;bool col[n]

, duijiao1[n]

, duijiao2[n]

;int biao[15]

;void

dfs(

int x)

for(

int y =

1; y <= n; y++)}

}int

main()

while

(cin >> n, n)

return0;

}

HDU2553 N皇后問題(DFS)

problem description 在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的n,求出有多少種合法的放置方法。input 共有若干行,每行乙個正整數n 10,表示棋盤和皇后的數量 如...

HDU2553 N皇后問題(dfs)

description 在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的n,求出有多少種合法的放置方法。input 共有若干行,每行乙個正整數n 10,表示棋盤和皇后的數量 如果n 0,表示結...

HDU2553 N皇后問題 DFS

problem description 在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的n,求出有多少種合法的放置方法。input 共有若干行,每行乙個正整數n 10,表示棋盤和皇后的數量 如...