MATLAB: Not sure how to approach this

random draw

I have a 2D matrix. Let's say A=80×100; I need a way to visit each cell in this matix only once. Moreover my problem is a little more involved than that. Not only do I want to visit each cell only once but the user also defines a window of certain size. Let's say WINDOW=3×3. Then let's say I randomly choose a location on A that corresponds to indecies [2,3]. Then this is considered a central location and in my algorithm I will also consider points around this central location as specified by the window. Hence in this example I will also consider points at indecies [1,3],[3,3],[1,2],[2,2],[3,2],[1,4],[2,4],[3,4]. So in the next round when I am trying to figure out which cell in A to visit, I will not consider these 9 points in my random draw. Any suggestions? Thanks!

Best Answer

A=rand(80,100);
[m,n]=size(A);
winsize=3;
midwin=winsize/2+.5;
[dx,dy]=ndgrid(1:winsize);
jumps = sub2ind([m,n],dx,dy)-sub2ind([m,n],midwin,midwin);
B=A;
B(:)=1:numel(A);
B=B(midwin:end+1-midwin, midwin:end+1-midwin);
points=B(:);
numpoints=length(points);
while numpoints
randlocation=points(randi(numpoints));
window=randlocation+jumps;
%%%%%%%%%%%%do stuff to A(window)
points=setdiff(points,window(:));
numpoints=numel(points);
end