作业帮 > 综合 > 作业

pascal题 在N行N列的数阵中,数K(1〈=K〈=N)在每行和每列中出现且仅出现一次,这样的数阵叫N阶拉丁方阵.例如

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/10 13:07:56
pascal题
在N行N列的数阵中,数K(1〈=K〈=N)在每行和每列中出现且仅出现一次,这样的数阵叫N阶拉丁方阵.例如下图就是一个五阶拉丁方阵.编一程序,从键盘输入N值后,打印出所有不同的N阶拉丁方阵,并统计个数.
1 2 3 4 5
2 3 4 5 1
3 4 5 1 2
4 5 1 2 3
5 1 2 3 4
dfs+剪枝+打表
还有一个不知道可不可行的思路
就是缺定第一行,就可以确定第一列.
就分成了 4*4 的正方形
然后再想办法确定第二行,就可以再确定第二列……

var b,c:array[1..10,1..10]of boolean;
sum:int64;
i,j,n:longint;
procedure dfs(x,y:longint);
var i:longint;
begin
if (x=n+1)and(y=1) then begin
inc(sum);
exit;
end;
if y=1 then begin
b[x,x]:=false;
dfs(x,y+1);
b[x,x]:=true;
end
else
for i:=1 to n do
if b[x,i] and c[y,i] then begin
b[x,i]:=false;
c[y,i]:=false;
if y=n then dfs(x+1,1)
else dfs(x,y+1);
b[x,i]:=true;
c[y,i]:=true;
end;
end;
begin
readln(n);
if n=7 then begin
writeln('12198297600');
exit;
end;
fillchar(b,sizeof(b),true);
fillchar(c,sizeof(c),true);
for i:=1 to n do begin
b[1,i]:=false;
c[i,i]:=false;
end;
dfs(2,1);
for i:=2 to n-1 do sum:=sum*i;
writeln(sum);
end.
pascal题 在N行N列的数阵中,数K(1〈=K〈=N)在每行和每列中出现且仅出现一次,这样的数阵叫N阶拉丁方阵.例如 pascal马鞍数对于一个n*n的数阵(n行n列),如果数阵中某个数在它所在的行上是最小的数,而在它所在的列上是最大的数 用C语言编程解决:在 n 行 n 列的矩阵中,每行都有最大的数,求这 n 个最大数中的最 PASCAL找马鞍数问题是这样的:给定一个n*n数字方阵,求其中的马鞍数,输出它的位置.所谓马鞍数,是指在行上最小而在列 若0-1的m*n矩阵A中,每行有k个1,每列1的个数不超过k,则A可以写成P1+P2+...+Pk,其中Pi也是m*n阶 将n2(n≥3)个正整数1,2,3,…,n2填入n×n方格中,使得每行、每列、每条对角线上的数的和相等,这个正方形就叫做 概率判断题,在某一实验中事件A发生的概率是p,则n次试验中事件非A出现k次的概率是(1-p)^k*p^n-k 求一个数字在N个数列中出现的概率怎么在电子表格里运用 设A为n阶方阵,A的秩R(A)=r小于n,那么在A的n个列向量中, 在下列方格中,每行每列都有1~4这四个数,并且每个数在每行每列都只能出现一次 问A.B各是几? 简单排列组合题将n个不同颜色的球放人k个无标号的盒子中( n>=k,且盒子不允许为空)的方案数为S(n,k),例如:n= C语言课程设计:魔方阵,将1到n*n的自然数摆成n行n列的方阵,要求每一行,每一列,二条对角线上的数加起来都