Codevs P1295 N皇后问题
题目描述 Description
在n×n格的棋盘上放置彼此不受攻击的n个皇后。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n后问题等价于再n×n的棋盘上放置n个皇后,任何2个皇后不妨在同一行或同一列或同一斜线上。
输入输出
输入描述 Input Description
给定棋盘的大小n (n ≤ 13)
输出描述 Output Description
输出整数表示有多少种放置方法。
样例 Sample
样例输入 Sample Input
8
样例输出 Sample Output
92
数据范围及提示 Data Size & Hint
n<=13
分析
深搜的经典基础题目。。。
代码如下
program p1295;
var row,column,left,right:array[-50..50] of boolean;
n:longint;
ans:int64;
procedure dfs(step:integer);
var k:integer;
begin
for k:=1 to n do
if row[k] and column[k] and left[step-k] and right[k+step]
then
begin
row[k]:=false;
column[k]:=false;
left[step-k]:=false;
right[k+step]:=false;
if step<n
then dfs(step+1);
if step=n then ans:=ans+1;
row[k]:=true;
column[k]:=true;
left[step-k]:=true;
right[k+step]:=true;
end;
end;
begin
readln(n);
fillchar(row,sizeof(row),true);
fillchar(column,sizeof(column),true);
fillchar(left,sizeof(left),true);
fillchar(right,sizeof(right),true);
ans:=0;
dfs(1);
write(ans);
end.
测试结果
运行结果
测试点#1.in 结果:AC 内存使用量: 256kB 时间使用量: 0ms
测试点#2.in 结果:AC 内存使用量: 256kB 时间使用量: 1ms
测试点#3.in 结果:AC 内存使用量: 256kB 时间使用量: 4ms
测试点#4.in 结果:AC 内存使用量: 256kB 时间使用量: 107ms
测试点#5.in 结果:AC 内存使用量: 256kB 时间使用量: 624ms
…担心