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

1 Ansicht (letzte 30 Tage)
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

Akzeptierte Antwort

Jan
Jan am 16 Sep. 2017
Bearbeitet: Jan am 16 Sep. 2017
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

Weitere Antworten (2)

Image Analyst
Image Analyst am 16 Sep. 2017
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 Kommentare
Jan
Jan am 16 Sep. 2017
I still don't get it: Do you mean a single 1 in each row and in each column?
Shawn Blancett
Shawn Blancett am 16 Sep. 2017
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

Melden Sie sich an, um zu kommentieren.


Walter Roberson
Walter Roberson am 16 Sep. 2017
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

Kategorien

Mehr zu Random Number Generation finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by