n×nの行列に1~nまでの数字をランダムにn個ずつ割り振り、行または列方向には各数字が1回しか登場しない行列を作成するプログラムです。
This function returns a n-by-n matrix contains random ordered 1,…,n. Each number appears only once at each row/column position.
Like This↓
4 | 1 | 2 | 3 |
1 | 2 | 3 | 4 |
2 | 3 | 4 | 1 |
3 | 4 | 1 | 2 |
function Y = randOrderedMatrix(n) % This function returns a n-by-n matrix contains random ordered 1...n. % Each number appears only once at each row/column position. % Usage: % Y = randOrderedMatrix(n) % % e.g. % A = randOrderedMatrix(4) % A = % 4 1 2 3 % 1 2 3 4 % 2 3 4 1 % 3 4 1 2 % % 2020/02/25 coded by Haruhiko Iwaoki X = zeros(n); x = 1:n; for i=1:n X(i,x) = circshift(x, [1 -i]); end X = X(:,X(1,:)~=0); r = randperm(n); for i=1:n Y(i,:) = X(r(i),:); end X = Y; c = randperm(n); for i=1:n Y(:,i) = X(:,c(i)); end end
【MATLAB】行/列方向に重複のないランダム順序のn×n行列生成