拉丁矩阵(Pascal语言)

来源:百度知道 编辑:UC知道 时间:2024/05/16 06:11:38
1、一个NXN的拉丁正方形含有整数1~N,且在任意的行或列中都不出现重复数据,一种可能的6X6拉丁正方形如下:
6 3 1 4 2 5
1 4 5 6 3 2
5 6 2 1 4 3
2 1 3 5 6 4
3 5 4 2 1 6
4 2 6 3 5 1

在线等答案,如果能给出答案的,追加50分悬赏!
(请使用二维数组和pascal语言)

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.

不会pascal我就说说我的思路

输入整数N
N=M
形成N*N列的矩阵

那么先弄一个N长度的数组,二个N*N的二维数组

原始数组:
一个N长度的数组,用来盛1~N的整数,以后的数字由这个