MATLAB: How to simulate a random castle in a chessboard

MATLABmatrixnot in the same row and columnonerandomwhile loopzeros

%the randomly generated castle should be within the chessboard, let say zeros matrix:
CB = zeros (8,8); % chessboard
% and the castle must be the one in this matrix:
C = 1; % Castle
% now randomly generate a castle:
CB (round((8-1)*rand+1),round((8-1)*rand+1))= C; % random generatation for castle
% then i will find out where is the generated castle and i want to generate also randomly a lot of castles, which are not in the same row and column:
[row,column] = find (CB);
x = round((8-1)*rand+1);
y = round((8-1)*rand+1);
I = length (row);
while row(I,:)~= x && row(I,:)~= y && column(I,:)~= y && column(I,:)~= x
CB (x,y)= C;
[row,column] = find (CB);
I = length (row);
x = round((8-1)*rand+1);
y = round((8-1)*rand+1);
end
disp (CB)
the problem is, i dont want to accept any number from row and column in the while loop. I tried with any, all and ismember (functions) but i is not working.

Best Answer

Hi,
if you try to run this code:
close all
clear all
clc
n = 8; %chessboard size
CB = zeros(n,n); %init chessboard
k = 0;
niter = 0;
while(k<n) %stop condition
x = randi(n);
y = randi(n);
if sum(CB(x,:))+sum(CB(:,y)) == 0
CB(x,y) = 1;
k = k+1;
end
niter = niter + 1;
end
spy(CB,'ro',28)
hold on
spy(~CB,'b+',28)
you fill with 1 if there are no ones in the same row or column, obtaining following result (this plot changes every time due to introduced randomness with randi function):
Hope this helps.