【发布时间】:2017-05-31 02:09:02
【问题描述】:
我对 MATLAB 相当生疏,我正在尝试通过自动化一些拉丁方问题来复习。我正在处理的代码如下:
counter=1;
for i=1:10
for j=1:10
if A(i,j)=0
A(i,j)=[This is where I'm stuck];
end
counter=counter+1;
end
end
我希望这段代码检查A(i,j) 中的值以确定[1,...,n] 中的值是否已经存在于第i 行中,然后从中选择随机值
[1,...,n] excluding [values already present].
基本上我只是想强制完成部分拉丁方块。
编辑:
我不是要生成随机的拉丁方格,而是要生成具有特定属性的方格。例如,假设我们有以下设置:
A=[X,0,0,0,Y,0,0,0,Z]
其中 0,X,Y,Z 都是 3x3 子矩阵,X,Y,Z 的值从 1,...,9 开始。我正在尝试设计一种自动化方法来完成部分拉丁方格,其中有一些值。
【问题讨论】:
-
你可能想要
if A(i,j) == 0(比较)而不是if A(i,j) = 0(分配) -
为什么要暴力破解?
toeplitz是你的朋友:latin = toeplitz(1:10, [1 10:-1:2]); newLatin = latin(randperm(10), randperm(10)); -
...或
hankel:latin = hankel(1:10, [10 1:9]); newLatin = latin(randperm(10), randperm(10)); -
我已经在答案中扩展了@gnovice 的评论,因为它是正确的并且值得一些上下文 :) 顺便说一句,如果您正在考虑复习数学编码技能,我推荐 @ 987654323@ 用于简短的算法挑战,因为
toeplitz之类的可能不适用于您未来的 Matlab 职业!
标签: matlab latin-square