ID:45685
Title:D1-3
Author:Abhisek Ukil
Date:2008-04-30 19:32:31
Score:32740.7039
Result:327179.00 (cyc: 30, node: 727)
CPU Time:0.5658
Status:Passed
Comments:
Based on:none
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