Can anyone tell me what is wrong with my script?

1 Ansicht (letzte 30 Tage)
Shawn Blancett
Shawn Blancett am 18 Sep. 2017
Kommentiert: Stephen23 am 18 Sep. 2017
N = input('boardsize ');
NQ = 0;
X = zeros(N);
X(sub2ind([N,N], 1:N, randperm(N, N))) = 1;
while(NQ<N)
for i = 1:N
for j = 1:N
if(X(i,j) == 1)
X(:,j) = 8;
X(i,j) = 1;
end
end
end
X0=logical(X);
[i,j]=find(X0);
[ii,jj]=ndgrid(1:N);
X=reshape(ismember(ii(:)-jj(:),i-j) + ismember(ii(:)+jj(:),i+j),N,N);
X(X>0)=8;
X(X0)=1;
index = find([X] == 1);
NQ = numel(index);
end
disp(X)
>> Queens
boardsize 8
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
The output prints out all 1's when I really want to have an array with N amount of 1's where N is the boardsize NxN. As well as 8's in places that are attacked diagonally and horizontally. I know the individual loops work to "attack the spaces from where the ones are found in the array but together I think my while loop messes it all up. anyone know what I wrong?

Antworten (0)

Kategorien

Mehr zu Creating and Concatenating Matrices 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