| Code: | function W = solver(B)
W = zeros(0,4);
x=B;
swSr=unique(x);
swSr=swSr(find(swSr));
for count=1:numel(swSr)
PIN=swSr(count);
POS=find(x==PIN);
[I,J]=ind2sub(size(x),POS);
in=[I J];
for i=1:size(in,1)-1
tempin=in(i:i+1,:);
out=ili(tempin);
[output,intersect]=sSs(x,PIN,out);
if isempty(intersect)
W=[W;output];
else
break
end
end
end
function out=ili(in)
out=[];
for i=1:size(in)-1
rDr=in(i,1); RdR=in(i,2);
cFG=in(i+1,1); aaa=in(i+1,2);
if rDr==cFG & RdR<aaa %exactly left
for i=RdR:aaa-1
out(end+1,1:4)=[rDr i cFG i+1];
end
elseif rDr==cFG & RdR>aaa %exactly right
for i=RdR:-1:aaa+1
out(end+1,1:4)=[rDr i cFG i-1];
end
elseif rDr<cFG & RdR==aaa %exactly up
for i=rDr:cFG-1
out(end+1,1:4)=[i RdR i+1 aaa];
end
elseif rDr>cFG & RdR==aaa %exactly down
for i=rDr:-1:cFG+1
out(end+1,1:4)=[i RdR i-1 aaa];
end
elseif rDr<cFG & RdR<aaa %up left
for i=RdR:aaa-1
out(end+1,1:4)=[rDr i rDr i+1];
end
rDr=out(end,3);
RdR=out(end,4);
for i=rDr:cFG-1
out(end+1,1:4)=[i RdR i+1 RdR];
end
elseif rDr<cFG & RdR>aaa %up right
for i=RdR:-1:aaa+1
out(end+1,1:4)=[rDr i rDr i-1];
end
rDr=out(end,3);
RdR=out(end,4);
for i=rDr:cFG-1
out(end+1,1:4)=[i RdR i+1 RdR];
end
elseif rDr>cFG & RdR<aaa %down left
for i=rDr:-1:cFG+1
out(end+1,1:4)=[i RdR i-1 RdR];
end
rDr=out(end,3);
RdR=out(end,4);
for i=RdR:aaa-1
out(end+1,1:4)=[rDr i rDr i+1];
end
elseif rDr>cFG & RdR>aaa %down right
for i=rDr:-1:cFG+1
out(end+1,1:4)=[i RdR i-1 RdR];
end
rDr=out(end,3);
RdR=out(end,4);
for i=RdR:-1:aaa+1
out(end+1,1:4)=[rDr i rDr i-1];
end
end
end
function [output,intersect]=sSs(mMm,ll1,nNn)
output=nNn;
intersect=[];
for i=1:size(nNn,1)
r=nNn(i,3);
c=nNn(i,4);
if mMm(r,c)~=0 & mMm(r,c)~=ll1
intersect(end+1,1:3)=[r c mMm(r,c)];
end
end
|