PASCAL哪里错了???

来源:百度知道 编辑:UC知道 时间:2024/09/28 08:54:29
题目
构造N*N阶的拉丁方阵(2<=N<=9),使方阵中的每一行和每一列中数字1到N只出现一次。如N=4时:

1234
2341
3412
4123

program d;
var n,s,h,m,i :integer;
begin
readln(n);
n:=m;i:=1;
for s:= 1 to m do
begin
for h:= 1 to m do
begin
write(i,1);
i:=i+1;
end;
i:=i-1;
writeln;
end;
readln
end.

program latin;
var a,b:array [1..9,1..9]of boolean;
g:array [1..9,1..9] of byte;
t,s,h,n:integer;
procedure print;
var i,j:integer;
begin
for i:=1 to n do
begin
for j:=1 to n do
write(g[i,j]:4);
writeln;
end;
halt;
end;

procedure rp(t,s,h:integer);
var i,j:integer;
begin
if t>n*n then print
else for i:=1 to n do
if a[s,i] and b[h,i] then
begin
a[s,i]:=false;
b[h,i]:=false;
g[s,h]:=i;
if t mod n=0 then rp(t+1,s+1,1)
else rp(t+1,s,h+1);
a[s,i]:=true;
b[h,i]:=true;
end;
end;

begin
readln(n);
fillchar(a,sizeof(a),true);
fillchar(b,sizeof(b),true);
rp(1,1,1);
readln;
end.

以上是许多人正常的做法,你的程序思路不对
,我看不懂。
不过我看出了n:=m应该为m:=n
还有write(i,1); 答应出的变量i后会有一个"1"
这不正确