Balanced Latin squares
A latin square is an N x N matrix in which every row and column contains exactly one of each of N elements. If the square is balanced, every element is followed and preceded exactly once by each other element.
The following Matlab script generates random balanced latin squares.
function L = latin(N)
while 1 == 1,
L = zeros(N, N);
L(1, 1:N) = randperm(N);
for i = 1:N,
for j = 1:N,
if L(i, j) ~= 0,
continue;
end;
allowed = 1:N;
for test = 1:N,
if ~isempty(find(L(i, :) == allowed(test))),
allowed(test) = 0;
continue;
elseif ~isempty(find(L(:, j) == allowed(test))),
allowed(test) = 0;
continue;
else,
for k = 1:i,
el = find(L(k, :) == allowed(test));
if el > 1 & j > 1,
if L(i, j - 1) == L(k, el - 1),
allowed(test) = 0;
end;
end;
end;
end;
end;
allowed(find(allowed == 0)) = [];
if ~isempty(allowed),
L(i, j) = allowed(1);
end;
end;
end;
if isempty(find(L == 0)),
break;
end;
end