【洛谷 1219】八皇后

问题描述
使得每行、每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子。请编一个程序找出所有跳棋放置的解。并把它们以上面的序列方法输出。解按字典顺序排列。请输出前3个解。最后一行是解的总个数。
样例输入
6
样例输出
2 4 6 1 3 5
3 6 2 5 1 4
4 1 5 2 6 3
4
算法讨论
比较经典的搜索题,数据也很小,直接暴搜就好了。

const
  maxn=100;
var
  a,l1,l2,d:array[-maxn..maxn] of longint;
  i,j,n,s:longint;

procedure dfs(dep:longint);
var
  i,j:longint;
begin
  if dep>n
    then begin
           if (a[dep-1]<>0) and (s<3)
             then begin
                    for i:=1 to n do
                      write(a[i],' ');
                    writeln;
                  end;
           if a[dep-1]<>0
             then inc(s);
           exit
         end;
  for i:=1 to n do
    if (d[i]=0) and (l1[dep-i]=0) and (l2[dep+i]=0)
      then begin
             d[i]:=1;
             l1[dep-i]:=1;
             l2[dep+i]:=1;
             a[dep]:=i;
             dfs(dep+1);
             d[i]:=0;
             l1[dep-i]:=0;
             l2[dep+i]:=0;
             a[dep]:=0
           end;
end;

begin
  read(n);
  dfs(1);
  write(s)
end.

这里写图片描述
Pixiv ID:61548898

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值