codevs天梯N皇后 dfs

来源:互联网 发布:亚投行招聘 知乎 编辑:程序博客网 时间:2024/06/05 07:13

题目:

在n×n格的棋盘上放置彼此不受攻击的n个皇后。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n后问题等价于再n×n的棋盘上放置n个皇后,任何2个皇后不妨在同一行或同一列或同一斜线上。

分析:

做过的啦,dfs即可。

代码:

const
  maxn=100;


var
  a,b,c:array [-maxn..maxn] of boolean;
  n,sum:longint;


procedure dfs(dep:longint);
var
  i:longint;
begin
  if dep>n then
    begin
      inc(sum);
      exit;
    end;
  for i:=1 to n do
    if (not a[i]) and (not b[i+dep]) and (not c[i-dep]) then
      begin
        a[i]:=true;
        b[i+dep]:=true;
        c[i-dep]:=true;
        dfs(dep+1);
        a[i]:=false;
        b[i+dep]:=false;
        c[i-dep]:=false;
     end;
end;


begin
  readln(n);
  dfs(1);
  writeln(sum);
end.

0 0