Print numbers on an array that have a unique row and column
1 view (last 30 days)
Show older comments
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
0 Comments
Accepted Answer
Jan
on 16 Sep 2017
Edited: Jan
on 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
0 Comments
More Answers (2)
Image Analyst
on 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 Comments
Walter Roberson
on 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
0 Comments
See Also
Categories
Find more on Random Number Generation in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!