【洛谷 1219】八皇后

来源:互联网 发布:南京雨花台区网络问政 编辑:程序博客网 时间:2024/05/01 16:29

问题描述
使得每行、每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子。请编一个程序找出所有跳棋放置的解。并把它们以上面的序列方法输出。解按字典顺序排列。请输出前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

0 0
原创粉丝点击