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,表示棋盤和皇后的數量 如...