永发信息网

我是菜鸟,懂pascal的帮我看看错。(n皇后)

答案:2  悬赏:60  手机版
解决时间 2021-04-16 08:13
  • 提问者网友:富士山上尢
  • 2021-04-16 03:33

VAR
x:ARRAY[1..nmax] OF integer;
a:ARRAY[1..nmax] OF boolean;
b:ARRAY[2..nmax*2] OF boolean;
c:ARRAY[-nmax..nmax] OF boolean;
count,n:integer;
PROCEDURE print;
VAR
k:integer;
BEGIN
count:=count+1;
FOR k:= 1 TO n DO
write(x[k]:4);
writeln;
END;
PROCEDURE try(i:integer);
VAR
j:integer;
BEGIN
FOR j:= 1 TO n DO
IF a[j] AND b[i+j] and c[i-j]
THEN BEGIN
x[i]:=j;
a[j]:=false;
b[i+j]:=false;
c[i-j]:=false;
IF i<n

THEN try(i+1)
ELSE print;
a[j]:=true;
b[i+j]:=true;
c[i-j]:=true;
END{if}
END;
BEGIN
assign(input,'nqueen.in');
reset(input);
assign(output,'nqueen.out');
rewrite(output);
readln(n);
count:=0;
fillchar(a,sizeof(a),true);
fillchar(b,sizeof(b),true);
fillchar(c,sizeof(c),true);
try(1);
writeln(count);
close(input);
close(output);
END.

最佳答案
  • 五星知识达人网友:第幾種人
  • 2021-04-16 04:56
少对于"nmax"的赋值,在第一行输下 const nmax=10000; 书可以自己换
全部回答
  • 1楼网友:拾荒鲤
  • 2021-04-16 05:20
具体题目?发下
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯