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

1 vue (au cours des 30 derniers jours)
Shawn Blancett
Shawn Blancett le 16 Sep 2017
Commenté : Shawn Blancett le 16 Sep 2017
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

Réponse acceptée

Jan
Jan le 16 Sep 2017
Modifié(e) : Jan le 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

Plus de réponses (2)

Image Analyst
Image Analyst le 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 commentaires
Jan
Jan le 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 le 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

Connectez-vous pour commenter.


Walter Roberson
Walter Roberson le 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

Catégories

En savoir plus sur Random Number Generation dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by