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

1 visualización (últimos 30 días)
Shawn Blancett
Shawn Blancett el 16 de Sept. de 2017
Comentada: Shawn Blancett el 16 de Sept. de 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

Respuesta aceptada

Jan
Jan el 16 de Sept. de 2017
Editada: Jan el 16 de Sept. de 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

Más respuestas (2)

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

Iniciar sesión para comentar.


Walter Roberson
Walter Roberson el 16 de Sept. de 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

Categorías

Más información sobre Random Number Generation en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by