首页 > 学院 > 开发设计 > 正文

P1219 八(N)皇后

2019-11-10 19:30:45
字体:
来源:转载
供稿:网友

题目描述

有一个N*N的棋盘,有N个棋子被放置在棋盘上,使得每行、每列有且只有一个,每条对角线上至多有一个棋子,输出前三个解和解的总数。

样例输入

6

样例输出

2 4 6 1 3 53 6 2 5 1 44 1 5 2 6 34

思路

O(2^n)我要严重吐槽这个题目,那个n还是我补上的。使用多个数组记录列和对角线的情况,若皇后可在对角线上连成直线,则横纵坐标之和、之差均相等。var d:array[1..20] of longint; a,b,c:array[-100..160] of 0..1; t,n,z:longint;PRocedure try(s:longint);var i:longint;begin if s>n then begin if z<>3 then begin inc(z); for i:=1 to n do write(d[i],' '); writeln; end; inc(t); exit; end; for i:=1 to n do if (a[i]=0)and(b[s-i]=0)and(c[s+i]=0) then begin d[s]:=i; a[i]:=1; b[s-i]:=1; c[s+i]:=1; try(s+1); a[i]:=0; b[s-i]:=0; c[s+i]:=0; end;end;begin readln(n); try(1); writeln(t);end.
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表