Print numbers on an array that have a unique row and column

1 回表示 (過去 30 日間)
Shawn Blancett
Shawn Blancett 2017 年 9 月 16 日
コメント済み: Shawn Blancett 2017 年 9 月 16 日
The code I wrote can print 1's on a unique column but can be on the same row. How could I get it to have a unique row?
for k=1:N % Loops N times
random = randi([1,N]); % Chooses a random number between 1 and board size
X(k,random) = 1; % Places a 'queen' on a random column
end

採用された回答

Jan
Jan 2017 年 9 月 16 日
編集済み: Jan 2017 年 9 月 16 日
Perhaps you want:
index = randperm(8, 8);
X = zeros(8, 8);
for k = 1:8
X(k, index(k)) = 1;
end
0 0 0 0 0 0 1 0
0 1 0 0 0 0 0 0
0 0 0 0 0 0 0 1
0 0 0 0 0 1 0 0
0 0 0 0 1 0 0 0
1 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0
0 0 1 0 0 0 0 0
Alternatively without a loop:
X = zeros(8, 8);
X(sub2ind([8,8], 1:8, randperm(8, 8))) = 1

その他の回答 (2 件)

Image Analyst
Image Analyst 2017 年 9 月 16 日
Try this:
X = zeros(8, 8); % Initialize
rc = randi([1,8], 1, 2) % One location on the board.
X(rc(1), rc(2)) = 1 % Assign a queen to that square
  7 件のコメント
Jan
Jan 2017 年 9 月 16 日
I still don't get it: Do you mean a single 1 in each row and in each column?
Shawn Blancett
Shawn Blancett 2017 年 9 月 16 日
If the board was NxN I want N amount of 1's the board, that have a unique row and column , so no 1 shares a column or row with another 1

サインインしてコメントする。


Walter Roberson
Walter Roberson 2017 年 9 月 16 日
X = zeros(N, N);
available = 1 : N;
for k=1:N % Loops N times
ridx = randi(length(available));
random = available(ridx);
available(ridx) = [];
X(k,random) = 1; % Places a 'queen' on a random column
end

カテゴリ

Help Center および File ExchangeRandom Number Generation についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by