| Code: | % Author: Nick Howe
function W = solder(B)
[nrow,ncol] = size(B);
xB(1:2:2*nrow,1:2:2*ncol) = B;
[Bi,Bj,Bv] = find(xB);
%allV = unique(Bv);
%xB(2:2:end,2:2:end) = nan;
%for v = fliplr(allV')
%end;
for i = 1:numel(Bi)
v = xB(Bi(i),Bj(i));
down = find(xB(Bi(i)+1:end,Bj(i)),1);
right = find(xB(Bi(i),Bj(i)+1:end),1);
if ~isempty(down)&(xB(Bi(i)+down,Bj(i))==v)
xB = connect(xB,Bi(i),Bj(i),Bi(i)+down,Bj(i));
elseif ~isempty(right)&(xB(Bi(i),Bj(i)+right)==v)
xB = connect(xB,Bi(i),Bj(i),Bi(i),Bj(i)+right);
end;
end;
W = convertSol(xB);
end
function W = convertSol(xB)
v = xB(2:2:end,1:2:end);
h = xB(1:2:end,2:2:end);
b = xB(1:2:end,1:2:end);
[vi,vj] = find(v~=0);
[hi,hj] = find(h~=0);
[bi,bj] = find(isinf(b));
W = [vi vj vi+1 vj; hi hj hi hj+1; bi bj bi bj];
end
function xB = connect(xB,r1,c1,r2,c2)
if (r1==r2)
xB(r1,c1:c2) = xB(r1,c1);
elseif (c1==c2)
xB(r1:r2,c1) = xB(r1,c1);
end
end
|