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