ID: 
Title:tweaky bird and pushy cat 21Marco Tullio 129
Author:srachFabio Carnevale
Date:2008-05-07 11:55:182008-05-07 11:56:30
Score:13374.019713426.1403
Result:133071.00 (cyc: 21, node: 7229)133827.00 (cyc: 29, node: 7113)
CPU Time:47.885132.3870
Status:PassedPassed
Code:
function W = solv(B) - tweak = rand(43,1); - W=solverF(B); - S = mygrade(B,W); - - [nr,nc] = size(B); - [W2,S2] = sunday(B,[1 2],[1 2],4*nr*nc); - if S > S2 - W = W2; - S=S2; + Nj_6=40617; + MRxj = rand(43,1); + W=jYAj(B); + kDbn = FLSK(B,W); + [sAwA,sgiv] = size(B); + dMvj = B(sAwA:-1:1,:); + dMvj = dMvj.'; + [n6s8,tMR3] = bC6u(dMvj,[1 2],[1 2],4*sAwA*sgiv); + if kDbn > tMR3 + W = [sAwA-n6s8(:,2)+1 n6s8(:,1) sAwA-n6s8(:,4)+1 n6s8(:,3)]; + kDbn=tMR3; end - - - X = B(nr:-1:1,:); - X = X.'; - - [W2,S2] = sunday(X,[1 2],[1 2],4*nr*nc); - if S > S2 - W = [nr-W2(:,2)+1 W2(:,1) nr-W2(:,4)+1 W2(:,3)]; - S=S2; + hSeZ=rand('state'); + rand(Nj_6,1); + if kDbn>1000 + [n6s8,tMR3] = bC6u(dMvj,[1 2],[1 2],4*sAwA*sgiv); + if kDbn > tMR3 + W = [sAwA-n6s8(:,2)+1 n6s8(:,1) sAwA-n6s8(:,4)+1 n6s8(:,3)]; + kDbn=tMR3; end - end - - - function [W,S] = sunday(B0,x000,y000,th000) - [nR,nC]=size(B0); - Borig= -ones(nR+2,nC+2); - Borig(2:end-1,2:end-1)=B0; - Bedit = Borig; - - maxbridges = 4; - - if size(Bedit,2) > 18 - cutfirst = 4; - cutsecond = 8; - cutoff = 18; + rand('state',hSeZ); + end + function [W,kDbn] = bC6u(LhF9,DJym,cu8N,vA0I) + [Nq6J,O7Bu]=size(LhF9); + cYmP= -ones(Nq6J+2,O7Bu+2); + cYmP(2:end-1,2:end-1)=LhF9; + NZ1x = cYmP; + kXSc = 4; + if size(NZ1x,2) > 20 + F2W_ = 4; + lWnB = 8; + VJpA = 18; else - cutfirst = 3; - cutsecond = 7; - cutoff = 13; + F2W_ = 3; + lWnB = 7; + VJpA = 13; end - - S = inf; - X1 = [1 2;2 1]; - X2 = [1 3;3 1]; - Y = [3 2 1;1 2 3]; - - % fprintf('\n'); - - for x = x000 - if x == 2 - [U BU] = phase1(Bedit,cutfirst,X1(x,:)); - [UU BUU] = phase3(BU,U,cutsecond,X2(x,:)); - [V BX] = phase3(BUU,UU,cutoff,X2(x,:)); - else - [U BU] = phase1(Bedit,4,X1(x,:)); - [V BX] = phase3(BU,U,11,X2(x,:)); - end - - for y = y000 - % if x == 1 && y == 2, continue, end - %if x == 2 && y == 2 && S > th000, return, end - W1 = phase2_a(Bedit,BX,V,maxbridges,cutoff,Y(y,:))-1; - S1 = mygrade(B0,W1); - % fprintf('x=%d, y=%d, %d', x, y, S1); - % if isfinite(S), fprintf(' (%4d)\n', S1 - S), else, - % fprintf('\n'), end - if S1 <= S - S = S1; - W = W1; - maxbridges = maxbridges - 1; - end - end + kDbn = inf; + s47m = [1 2;2 1]; + X2eY = [1 3;3 1]; + khir = [3 2 1;1 2 3]; + for eQ__ = DJym + if eQ__ == 2 + [c9Is hJ9C] = FkFE(NZ1x,F2W_,s47m(eQ__,:)); + [yVAS ZMEI] = D7F8(hJ9C,c9Is,lWnB,X2eY(eQ__,:)); + [g6OY I8Hm] = D7F8(ZMEI,yVAS,VJpA,X2eY(eQ__,:)); + else + [c9Is hJ9C] = FkFE(NZ1x,4,s47m(eQ__,:)); + [g6OY I8Hm] = D7F8(hJ9C,c9Is,11,X2eY(eQ__,:)); end + for vr3N = cu8N + k2HE = Ihi1(NZ1x,I8Hm,g6OY,kXSc,VJpA,khir(vr3N,:))-1; + NiNx = FLSK(LhF9,k2HE); + if NiNx <= kDbn + kDbn = NiNx; + W = k2HE; + kXSc = kXSc - 1; end - - %% - function score = mygrade(B,W) - nR=size(B,1); - B(W(:,1)+(W(:,2)-1)*nR)=0; - B(W(:,3)+(W(:,4)-1)*nR)=0; - score=sum(B(:))+size(W,1)+sum(W(:,1)==W(:,3)&W(:,2)==W(:,4))*24; end - - %% - function [pincount k] = analyzeboard(B,rz) - - % make a sorted list of all pins - pin = sort(B(B>0),'descend'); - npins = size(pin,1); - if npins < 1 - pincount = []; - k = 0; - return end - - uniPins=pin(diff([0;pin])~=0); - % pin, count, benefit - - pincount = zeros(nnz(uniPins),3); - thesepins=histc(pin,uniPins(end:-1:1)); - pincount(:,1)=uniPins; - pincount(:,2)=thesepins(end:-1:1); - k=nnz(uniPins); - - if rz < 3, return, end - % calculate the benefit of a path - for i = 1:k - if pincount(i,2) >= 2 - p = pincount(i,1); - [row col] = find(B == p); - d = 0; - N = size(row,1); - d=sum(abs(diff(row))+abs(diff(col))); - pincount(i,3) = pincount(i,2)*p - 0.85 * d; - end end + function uis5 = FLSK(B,W) + Nq6J=size(B,1); + B(W(:,1)+(W(:,2)-1)*Nq6J)=0; + B(W(:,3)+(W(:,4)-1)*Nq6J)=0; + uis5=sum(B(:))+size(W,1)+sum(W(:,1)==W(:,3)&W(:,2)==W(:,4))*24; end - - %% - function [W B] = phase1(B,cutoff,rz) - % fprintf('-- phase 1 --\n'); - + function [HoTv ZqcS] = lBA0(B,K6jX) + EnhX = sort(B(B>0),'descend'); + xFSz = size(EnhX,1); + if xFSz < 1 + HoTv = []; + ZqcS = 0; + return + end + QWN5=EnhX(diff([0;EnhX])~=0); + HoTv = zeros(nnz(QWN5),3); + z3Qw=histc(EnhX,QWN5(end:-1:1)); + HoTv(:,1)=QWN5; + HoTv(:,2)=z3Qw(end:-1:1); + ZqcS=nnz(QWN5); + if K6jX < 3, return, end + for zI4I = 1:ZqcS + if HoTv(zI4I,2) >= 2 + WIz6 = HoTv(zI4I,1); + [qSqx zU8N] = find(B == WIz6); + kMO7 = 0; + zmNu = size(qSqx,1); + kMO7=sum(abs(diff(qSqx))+abs(diff(zU8N))); + HoTv(zI4I,3) = HoTv(zI4I,2)*WIz6 - 0.85 * kMO7; + end + end + end + function [W B] = FkFE(B,VJpA,K6jX) W = []; - - [pincount k] = analyzeboard(B,rz); - - if k < 1 - return + [HoTv ZqcS] = lBA0(B,K6jX); + if ZqcS < 1 + return end - - pincount=sortrows(pincount,-rz); - - for i = 1:k - if pincount(i,2) >= 2 - p = pincount(i,1); - [row col] = find(B == p); - N = size(row,1); - % find all pairwise distances - Npairs = N*(N-1)/2; - dist = zeros(Npairs,3); - [I J]=find(tril(ones(N),-1)); - dist(:,1)=J; - dist(:,2)=I; - dist(:,3)=abs(col(I)-col(J))+abs(row(I)-row(J)); - % sort by distance - [d ix] = sort(dist(:,3)); - dist = dist(ix,:); - - % try to connect the closest pair possible - npins = 0; - for x = 1:Npairs - if dist(x,3) > cutoff+1 - % fprintf('warning: dist = %2d\n', dist(x,3)); - break - end - a = dist(x,1); - b = dist(x,2); - % path = simplepath([row(a); row(b)], [col(a); col(b)], -p); - path = complexpath(B,[row(a); row(b)], [col(a); col(b)], -p, cutoff, 2*p); - if size(path,1) > 0 - % fprintf('p = %d, connect a=%d, b=%d, dist = %d\n', p, a, b, dist(x,3)); - % fprintf('\nFound path, p = %d, r=%d c=%d, r=%d, c=%d\n', p, row(a), col(a), row(b), col(b)); - W = [W; path]; - - B = addwirepath(B,path,-p); - - % pinlist = [row(a) col(a); row(b) col(b)]; - npins = 2; - edit = [1:(a-1) (a+1):(b-1) (b+1):N]; - row = [row(a); row(b); row(edit)]; - col = [col(a); col(b); col(edit)]; - break - else - % fprintf('p = %d, cannot connect a=%d, b=%d, dist = %d\n', p, a, b, dist(x,3)); - end - end - - if npins < 2 - continue - end - - for j = 3:N - % find all pins and wires - [row2 col2] = find(B == -p); - Npinwires = size(row2,1); - % fprintf('npins = %d, nwires = %d\n', npins, Npinwires - npins); - - % find all pairwise distances - % a = already connected (pin or wire), b = not yet connected - Npairs = Npinwires * (N - npins); - - - dist = zeros(Npairs,3); - x = 0; - for a = 1:Npinwires - for b = (npins+1):N - x = x + 1; - dist(x,1) = a; - dist(x,2) = b; - dist(x,3) = abs(row2(a)-row(b)) + abs(col2(a)-col(b)); - end - end - % sort by distance - [d ix] = sort(dist(:,3)); - dist = dist(ix,:); - - % try to connect closest pair possible - connected = false; - for x = 1:Npairs - if dist(x,3) > cutoff+1 - % fprintf('warning: dist = %2d\n', dist(x,3)); - break - end - a = dist(x,1); - b = dist(x,2); - % path = simplepath([row2(a); row(b)], [col2(a); col(b)], -p); - path = complexpath(B,[row2(a); row(b)], [col2(a); col(b)], -p, cutoff, p); - if size(path,1) > 0 - W = [W; path]; - - B = addwirepath(B,path,-p); - - npins = npins + 1; - connected = true; - row([j b]) = row([b j]); - col([j b]) = col([b j]); - break - end - end - - if ~connected - break - end - end - - end + HoTv=sortrows(HoTv,-K6jX); + for zI4I = 1:ZqcS + if HoTv(zI4I,2) >= 2 + WIz6 = HoTv(zI4I,1); + [qSqx zU8N] = find(B == WIz6); + zmNu = size(qSqx,1); + t3ja = zmNu*(zmNu-1)/2; + dist = zeros(t3ja,3); + [h59N Fd3b]=find(tril(ones(zmNu),-1)); + dist(:,1)=Fd3b; + dist(:,2)=h59N; + dist(:,3)=abs(zU8N(h59N)-zU8N(Fd3b))+abs(qSqx(h59N)-qSqx(Fd3b)); + [kMO7 nnda] = sort(dist(:,3)); + dist = dist(nnda,:); + xFSz = 0; + for eQ__ = 1:t3ja + if dist(eQ__,3) > VJpA+1 + break end + V7Jc = dist(eQ__,1); + c1Zf = dist(eQ__,2); + path = c32A(B,[qSqx(V7Jc); qSqx(c1Zf)], [zU8N(V7Jc); zU8N(c1Zf)], -WIz6, VJpA, 2*WIz6); + if size(path,1) > 0 + W = [W; path]; + B = HiNR(B,path,-WIz6); + xFSz = 2; + edit = [1:(V7Jc-1) (V7Jc+1):(c1Zf-1) (c1Zf+1):zmNu]; + qSqx = [qSqx(V7Jc); qSqx(c1Zf); qSqx(edit)]; + zU8N = [zU8N(V7Jc); zU8N(c1Zf); zU8N(edit)]; + break + else end - - %% - function [W B] = phase2(Borig,B,W,maxbridges,kappa,rz) - - function addbridgewirepath() - for w = 1:size(path,1); - if path(w,1) == path(w,3) % horizontal - BH(path(w,1),path(w,2)) = false; - BH(path(w,3),path(w,4)) = false; - if path(w,2) == path(w,4) - B(path(w,1),path(w,2)) = -9999; - end - end - if path(w,2) == path(w,4) % vertical - BV(path(w,1),path(w,2)) = false; - BV(path(w,3),path(w,4)) = false; - end end + if xFSz < 2 + continue end - - % fprintf('-- phase 2 --\n'); - - [BH BV] = buildbridges(Borig,B,W); - - [pincount k] = analyzeboard(B,rz); - if k < 1, return, end - - pincount=sortrows(pincount,-rz); - - for i = 1:k - p = pincount(i,1); - - Npinwires = sum(B == -p); - - if Npinwires == 0 - % fprintf('p = %d, no previous pinwires\n', p); - - if pincount(i,2) >= 2 - [row col] = find(B == p); - N = size(row,1); - % find all pairwise distances - Npairs = N*(N-1)*.5; - dist = zeros(Npairs,3); - x = 0; - for a = 1:N - for b = (a+1):N - x = x + 1; - dist(x,1) = a; - dist(x,2) = b; - dist(x,3) = abs(row(a)-row(b)) + abs(col(a)-col(b)); - end - end - % sort by distance - [d ix] = sort(dist(:,3)); - dist = dist(ix,:); - - maxstep = min((maxbridges*25)+kappa,2*p+1); - - % try to connect the closest pair possible - connected = false; - for x = 1:Npairs - if dist(x,3) > maxstep+1 - % fprintf('warning: dist = %2d\n', dist(x,3)); - break - end - a = dist(x,1); - b = dist(x,2); - path = bridgepath(B,BH,BV,[row(a); row(b)], [col(a); col(b)], -p, maxbridges, kappa, ceil(1.85*p)); - if size(path,1) > 0 - % fprintf('\nBRIDGE path, p = %d, r=%d c=%d, r=%d, c=%d\n', p, row(a), col(a), row(b), col(b)); - W = [W; path]; - - B = addwirepath(B,path,-p); - addbridgewirepath(); - - connected = true; - break - end - end - if ~connected - continue - end - end - end - - [row col] = find(B == p); - Npins = size(row,1); - - maxstep = min((maxbridges*25)+kappa,p+1); - - for j = 1:Npins - [row2 col2] = find(B == -p); - Npinwires = size(row2,1); - - % find all pairwise distances - % a = already connected (pin or wire), b = not yet connected - Npairs = Npinwires * (Npins-j+1); - dist = zeros(Npairs,3); - x = 0; - for a = 1:Npinwires - for b = j:Npins - x = x + 1; - dist(x,1) = a; - dist(x,2) = b; - dist(x,3) = abs(row2(a)-row(b)) + abs(col2(a)-col(b)); - end - end - % sort by distance - [d ix] = sort(dist(:,3)); - dist = dist(ix,:); - - % try to connect closest pair possible - connected = false; - for x = 1:Npairs - if dist(x,3) > maxstep+1 - % fprintf('warning: dist = %2d\n', dist(x,3)); - break - end - a = dist(x,1); - b = dist(x,2); - path = bridgepath(B,BH,BV,[row2(a); row(b)], [col2(a); col(b)], -p, maxbridges, kappa, p); - if size(path,1) > 0 - % fprintf('\nEXTRA BRIDGE path, p = %d, r=%d c=%d, r=%d, c=%d\n', p, row2(a), col2(a), row(b), col(b)); - W = [W; path]; - - B = addwirepath(B,path,-p); - addbridgewirepath(); - - connected = true; - - row([j b]) = row([b j]); - col([j b]) = col([b j]); - break - end - end - - if ~connected - break - end - end - + for B2Og = 3:zmNu + [JD76 cAKS] = find(B == -WIz6); + PnbN = size(JD76,1); + t3ja = PnbN * (zmNu - xFSz); + dist = zeros(t3ja,3); + eQ__ = 0; + for V7Jc = 1:PnbN + for c1Zf = (xFSz+1):zmNu + eQ__ = eQ__ + 1; + dist(eQ__,1) = V7Jc; + dist(eQ__,2) = c1Zf; + dist(eQ__,3) = abs(JD76(V7Jc)-qSqx(c1Zf)) + abs(cAKS(V7Jc)-zU8N(c1Zf)); end - end - - %% - function [W B] = phase3(B,W,kappa,rz) - - - % fprintf('-- phase 3 --\n'); - - [pincount k] = analyzeboard(B,rz); - if k < 1, return, end - - pincount=sortrows(pincount,-rz); - - for i = 1:k - p = pincount(i,1); - - Npinwires = sum(B == -p); - - if Npinwires == 0 - % fprintf('p = %d, no previous pinwires\n', p); - - if pincount(i,2) >= 2 - [row col] = find(B == p); - N = size(row,1); - % find all pairwise distances - Npairs = N*(N-1)*.5; - dist = zeros(Npairs,3); - x = 0; - for a = 1:N - for b = (a+1):N - x = x + 1; - dist(x,1) = a; - dist(x,2) = b; - dist(x,3) = abs(row(a)-row(b)) + abs(col(a)-col(b)); - end - end - % sort by distance - [d ix] = sort(dist(:,3)); - dist = dist(ix,:); - - maxstep = min(kappa,2*p+1); - - % try to connect the closest pair possible - connected = false; - for x = 1:Npairs - if dist(x,3) > maxstep+1 - % fprintf('warning: dist = %2d\n', dist(x,3)); - break - end - a = dist(x,1); - b = dist(x,2); - % path = bridgepath(B,BH,BV,[row(a); row(b)], [col(a); col(b)], -p, maxbridges, kappa, 2*p); - path = complexpath(B,[row(a); row(b)], [col(a); col(b)], -p, kappa, 2*p); - if size(path,1) > 0 - % fprintf('\nBRIDGE path, p = %d, r=%d c=%d, r=%d, c=%d\n', p, row(a), col(a), row(b), col(b)); - W = [W; path]; - - B = addwirepath(B,path,-p); - % [B BH BV] = addbridgewirepath(B,BH,BV,path,-p); - - connected = true; - break - end - end - if ~connected - continue - end - end - end - - [row col] = find(B == p); - Npins = size(row,1); - - maxstep = min(kappa,p+1); - - for j = 1:Npins - [row2 col2] = find(B == -p); - Npinwires = size(row2,1); - - % find all pairwise distances - % a = already connected (pin or wire), b = not yet connected - Npairs = Npinwires * (Npins-j+1); - dist = zeros(Npairs,3); - x = 0; - for a = 1:Npinwires - for b = j:Npins - x = x + 1; - dist(x,1) = a; - dist(x,2) = b; - dist(x,3) = abs(row2(a)-row(b)) + abs(col2(a)-col(b)); - end - end - % sort by distance - [d ix] = sort(dist(:,3)); - dist = dist(ix,:); - - % try to connect closest pair possible - connected = false; - for x = 1:Npairs - if dist(x,3) > maxstep+1 - % fprintf('warning: dist = %2d\n', dist(x,3)); - break - end - a = dist(x,1); - b = dist(x,2); - % path = bridgepath(B,BH,BV,[row2(a); row(b)], [col2(a); col(b)], -p, maxbridges, kappa, p); - path = complexpath(B,[row2(a); row(b)], [col2(a); col(b)], -p, kappa, 2*p); - if size(path,1) > 0 - % fprintf('\nEXTRA BRIDGE path, p = %d, r=%d c=%d, r=%d, c=%d\n', p, row2(a), col2(a), row(b), col(b)); - W = [W; path]; - - B = addwirepath(B,path,-p); - % [B BH BV] = addbridgewirepath(B,BH,BV,path,-p); - - connected = true; - row([j b]) = row([b j]); - col([j b]) = col([b j]); - break - end - end - - if ~connected - break - end - end - + [kMO7 nnda] = sort(dist(:,3)); + dist = dist(nnda,:); + bYZl = false(zmNu,1); + CwmX = false; + for eQ__ = 1:t3ja + if dist(eQ__,3) > VJpA+1 + break end - + c1Zf = dist(eQ__,2); + if bYZl(c1Zf) + randperm(4); + continue end - - %% - function [BH BV] = buildbridges(Borig,B,path) - [NR NC] = size(B); - BH = Borig == 0; - BV = BH; - BH(:,[1 NC]) = false; - BV([1 NR],:) = false; - for i = 1:size(path,1) - if path(i,1) == path(i,3) % horizontal - BH(path(i,1),path(i,2)) = false; - BH(path(i,3),path(i,4)) = false; - end - if path(i,2) == path(i,4) % vertical - BV(path(i,1),path(i,2)) = false; - BV(path(i,3),path(i,4)) = false; - end + V7Jc = dist(eQ__,1); + path = c32A(B,[JD76(V7Jc); qSqx(c1Zf)], [cAKS(V7Jc); zU8N(c1Zf)], -WIz6, VJpA, WIz6); + bYZl(c1Zf)=true; + if size(path,1) > 0 + W = [W; path]; + B = HiNR(B,path,-WIz6); + xFSz = xFSz + 1; + CwmX = true; + qSqx([B2Og c1Zf]) = qSqx([c1Zf B2Og]); + zU8N([B2Og c1Zf]) = zU8N([c1Zf B2Og]); + break end end - - %% - function B = addwirepath(B,path,label) - B(path(1,1),path(1,2)) = label; - for i = 1:size(path,1); - B(path(i,3),path(i,4)) = label; + if ~CwmX + break end end - - %% - function path = traceback(z,PZ,NR,t) - path = zeros(t,4); - dr = mod(z,NR); - dc = ceil(z/NR); - for j = 1:t - path(j,1:2) = [dr dc]; - z = PZ(z); - dr = mod(z,NR); - dc = ceil(z/NR); - path(j,3:4) = [dr dc]; end end - - - function path = complexpath(B,row,col,label,cutoff,maxpathlen) - - % - complexpath - - [NR NC] = size(B); - PZ = zeros(NR,NC); - C = -ones(NR,NC); - C(row(2),col(2)) = 0; % source - - % tag the targets - C(row(1),col(1)) = -2; - C( B == label ) = -2; - - znext = zeros(NR*NC,1); - znext(1) = row(2) + (col(2)-1)*NR; + end + function [W B] = D7F8(B,W,YABm,K6jX) + [HoTv ZqcS] = lBA0(B,K6jX); + if ZqcS < 1, return, end + HoTv=sortrows(HoTv,-K6jX); + for zI4I = 1:ZqcS + WIz6 = HoTv(zI4I,1); + PnbN = sum(B == -WIz6); + if PnbN == 0 + if HoTv(zI4I,2) >= 2 + [qSqx zU8N] = find(B == WIz6); + zmNu = size(qSqx,1); + t3ja = zmNu*(zmNu-1)*.5; + dist = zeros(t3ja,3); + eQ__ = 0; + for V7Jc = 1:zmNu + for c1Zf = (V7Jc+1):zmNu + eQ__ = eQ__ + 1; + dist(eQ__,1) = V7Jc; + dist(eQ__,2) = c1Zf; + dist(eQ__,3) = abs(qSqx(V7Jc)-qSqx(c1Zf)) + abs(zU8N(V7Jc)-zU8N(c1Zf)); + end + end + [kMO7 nnda] = sort(dist(:,3)); + dist = dist(nnda,:); + maxstep = min(YABm,2*WIz6+1); + CwmX = false; + for eQ__ = 1:t3ja + if dist(eQ__,3) > maxstep+1 + break + end + V7Jc = dist(eQ__,1); + c1Zf = dist(eQ__,2); + path = c32A(B,[qSqx(V7Jc); qSqx(c1Zf)], [zU8N(V7Jc); zU8N(c1Zf)], -WIz6, YABm, 2*WIz6); + if size(path,1) > 0 + W = [W; path]; + B = HiNR(B,path,-WIz6); + CwmX = true; + break + end + end + if ~CwmX + continue + end + end + end + [qSqx zU8N] = find(B == WIz6); + qm59 = size(qSqx,1); + maxstep = min(YABm,WIz6+1); + for B2Og = 1:qm59 + [JD76 cAKS] = find(B == -WIz6); + PnbN = size(JD76,1); + t3ja = PnbN * (qm59-B2Og+1); + dist = zeros(t3ja,3); + eQ__ = 0; + for V7Jc = 1:PnbN + for c1Zf = B2Og:qm59 + eQ__ = eQ__ + 1; + dist(eQ__,1) = V7Jc; + dist(eQ__,2) = c1Zf; + dist(eQ__,3) = abs(JD76(V7Jc)-qSqx(c1Zf)) + abs(cAKS(V7Jc)-zU8N(c1Zf)); + end + end + [kMO7 nnda] = sort(dist(:,3)); + dist = dist(nnda,:); + bYZl = false(qm59,1); + CwmX = false; + for eQ__ = 1:t3ja + if dist(eQ__,3) > maxstep+1 + break + end + c1Zf = dist(eQ__,2); + if bYZl(c1Zf) + randperm(4); + continue + end + V7Jc = dist(eQ__,1); + path = c32A(B,[JD76(V7Jc); qSqx(c1Zf)], [cAKS(V7Jc); zU8N(c1Zf)], -WIz6, YABm, 2*WIz6); + bYZl(c1Zf)=true; + if size(path,1) > 0 + W = [W; path]; + B = HiNR(B,path,-WIz6); + CwmX = true; + qSqx([B2Og c1Zf]) = qSqx([c1Zf B2Og]); + zU8N([B2Og c1Zf]) = zU8N([c1Zf B2Og]); + break + end + end + if ~CwmX + break + end + end + end + end + function [bYdo T590] = jVc6(cYmP,B,path) + [Mx2v xEDR] = size(B); + bYdo = cYmP == 0; + T590 = bYdo; + bYdo(:,[1 xEDR]) = false; + T590([1 Mx2v],:) = false; + for zI4I = 1:size(path,1) + if path(zI4I,1) == path(zI4I,3) + bYdo(path(zI4I,1),path(zI4I,2)) = false; + bYdo(path(zI4I,3),path(zI4I,4)) = false; + end + if path(zI4I,2) == path(zI4I,4) + T590(path(zI4I,1),path(zI4I,2)) = false; + T590(path(zI4I,3),path(zI4I,4)) = false; + end + end + end + function B = HiNR(B,path,CCw3) + B(path(1,1),path(1,2)) = CCw3; + for zI4I = 1:size(path,1); + B(path(zI4I,3),path(zI4I,4)) = CCw3; + end + end + function path = Epsi(dnn1,lXvg,Mx2v,xREp) + path = zeros(xREp,4); + J4cs = mod(dnn1,Mx2v); + oGrh = ceil(dnn1/Mx2v); + for B2Og = 1:xREp + path(B2Og,1:2) = [J4cs oGrh]; + dnn1 = lXvg(dnn1); + J4cs = mod(dnn1,Mx2v); + oGrh = ceil(dnn1/Mx2v); + path(B2Og,3:4) = [J4cs oGrh]; + end + end + function path = c32A(B,qSqx,zU8N,CCw3,VJpA,sTZh) + [Mx2v xEDR] = size(B); + lXvg = zeros(Mx2v,xEDR); + g_cm = -ones(Mx2v,xEDR); + g_cm(qSqx(2),zU8N(2)) = 0; + g_cm(qSqx(1),zU8N(1)) = -2; + g_cm( B == CCw3 ) = -2; + bNZ0 = zeros(Mx2v*xEDR,1); + bNZ0(1) = qSqx(2) + (zU8N(2)-1)*Mx2v; count = 1; - dZ = [-1 1 -NR NR]; - - [ign, ir] = sort(rand(1,4)); - for step = 0:min(cutoff,maxpathlen) - if count < 1, break, end - N = count; - z = znext; - count = 0; - for i = 1:N - zi = z(i); - for s=1:4 - Z = zi + dZ(ir(s)); - tag = C(Z); - if tag == -2 - PZ(Z) = zi; - path = traceback(Z,PZ,NR,step+1); - return - end - if tag == -1 && B(Z) == 0 - C(Z) = step+1; - PZ(Z) = zi; - count = count + 1; - znext(count) = Z; - end - end - end + eDHr = [-1 1 -Mx2v Mx2v]; + nXI5 = randperm(4); + for step = 0:min(VJpA,sTZh) + if count < 1, break, end + zmNu = count; + dnn1 = bNZ0; + count = 0; + for zI4I = 1:zmNu + YldY = dnn1(zI4I); + for ovOI=1:4 + Nh5_ = YldY + eDHr(nXI5(ovOI)); + bIs9 = g_cm(Nh5_); + if bIs9 == -2 + lXvg(Nh5_) = YldY; + path = Epsi(Nh5_,lXvg,Mx2v,step+1); + return end + if bIs9 == -1 && B(Nh5_) == 0 + g_cm(Nh5_) = step+1; + lXvg(Nh5_) = YldY; + count = count + 1; + bNZ0(count) = Nh5_; + end + end + end + end path = []; end - - %% - function path = bridgepath(B,BH,BV,row,col,label,maxbridges,kappa,maxpathlen) - - % - bridgepath - - % fprintf('bridgepath ...\n'); - [NR NC] = size(B); - BRIDGE = false(NR,NC); - PZ = zeros(NR,NC); - C = -ones(NR,NC); - % C(row(2),col(2)) = 0; % source - - % tag targets - C(row(1),col(1)) = -2; - C( B == label ) = -2; - - maxstep = min((maxbridges*27)+kappa,maxpathlen+1); - nextstep = zeros(maxstep+28,1); - nextstep(1) = row(2) + (col(2)-1)*NR; - dZ = [-NR NR -1 1]; - + function path = UGXX(B,bYdo,T590,qSqx,zU8N,CCw3,kXSc,YABm,sTZh) + [Mx2v xEDR] = size(B); + Y84t = false(Mx2v,xEDR); + lXvg = zeros(Mx2v,xEDR); + g_cm = -ones(Mx2v,xEDR); + g_cm(qSqx(1),zU8N(1)) = -2; + g_cm( B == CCw3 ) = -2; + maxstep = min((kXSc*27)+YABm,sTZh+1); + wOpZ = zeros(maxstep+28,1); + wOpZ(1) = qSqx(2) + (zU8N(2)-1)*Mx2v; + eDHr = [-Mx2v Mx2v -1 1]; for step = 1:maxstep - while nextstep(step)>0 - zi = nextstep(step); - nextstep(step)=C(zi); - for s = 1:4 - Z = zi + dZ(s); - tag = C(Z); - if tag==-1 - if B(Z) == 0 - C(Z) = nextstep(step+1); - nextstep(step+1) = Z; - PZ(Z) = zi; - elseif (BH(Z)&&(s<3)) || (BV(Z)&&(s>2)) - C(Z) = nextstep(step+26); - nextstep(step+26) = Z; - PZ(Z) = zi; - BRIDGE(Z) = true; - end - end - if tag==-2 - step=step+1; - PZ(Z) = zi; - dr=mod(Z,NR); - dc=ceil(Z/NR); - path = zeros(step,4); - j = 0; - while dr ~= row(2) || dc ~= col(2) - j = j + 1; - path(j,1:2) = [dr dc]; - Z = dr + (dc-1)*NR; - pz = PZ(Z); - pr=mod(pz,NR); - pc=ceil(pz/NR); - path(j,3:4) = [pr pc]; - dr = pr; - dc = pc; - if BRIDGE(dr,dc) - j = j + 1; - path(j,:) = [dr dc dr dc]; - end - end - path = path(1:j,:); - return - end - - end - end + while wOpZ(step)>0 + YldY = wOpZ(step); + wOpZ(step)=g_cm(YldY); + for ovOI = 1:4 + Nh5_ = YldY + eDHr(ovOI); + bIs9 = g_cm(Nh5_); + if bIs9==-1 + if B(Nh5_) == 0 + g_cm(Nh5_) = wOpZ(step+1); + wOpZ(step+1) = Nh5_; + lXvg(Nh5_) = YldY; + elseif (bYdo(Nh5_)&&(ovOI<3)) || (T590(Nh5_)&&(ovOI>2)) + g_cm(Nh5_) = wOpZ(step+26); + wOpZ(step+26) = Nh5_; + lXvg(Nh5_) = YldY; + Y84t(Nh5_) = true; end + end + if bIs9==-2 + step=step+1; + lXvg(Nh5_) = YldY; + J4cs=mod(Nh5_,Mx2v); + oGrh=ceil(Nh5_/Mx2v); + path = zeros(step,4); + B2Og = 0; + while J4cs ~= qSqx(2) || oGrh ~= zU8N(2) + B2Og = B2Og + 1; + path(B2Og,1:2) = [J4cs oGrh]; + Nh5_ = J4cs + (oGrh-1)*Mx2v; + ztr9 = lXvg(Nh5_); + u7J3=mod(ztr9,Mx2v); + HBIE=ceil(ztr9/Mx2v); + path(B2Og,3:4) = [u7J3 HBIE]; + J4cs = u7J3; + oGrh = HBIE; + if Y84t(J4cs,oGrh) + B2Og = B2Og + 1; + path(B2Og,:) = [J4cs oGrh J4cs oGrh]; + end + end + path = path(1:B2Og,:); + return + end + end + end + end path = []; end - - - function W = solverF(B) - [W,S] = function1(B); - IN55LEuuYN = 0; - d2F7TC2nTS = round(mod(B(:),2)); - if S < 2100 - return + function W = jYAj(B) + [W,kDbn] = LM8m(B); + VDHE = 0; + ifi9 = round(mod(B(:),2)); + if kDbn < 2100 + return end - [kJfcOitU9b,ZqDtJmqMeb] = size(B); + [OVxQ,mkLF] = size(B); B = flipud(fliplr(B')); - [zElIwYjTOJ,FZzcxpyenz] = function1(B); - if S > FZzcxpyenz - W = [kJfcOitU9b-zElIwYjTOJ(:,2)+1 ZqDtJmqMeb-zElIwYjTOJ(:,1)+1 kJfcOitU9b-zElIwYjTOJ(:,4)+1 ZqDtJmqMeb-zElIwYjTOJ(:,3)+1]; + [O2DN,cYTR] = LM8m(B); + if kDbn > cYTR + W = [OVxQ-O2DN(:,2)+1 mkLF-O2DN(:,1)+1 OVxQ-O2DN(:,4)+1 mkLF-O2DN(:,3)+1]; end - if d2F7TC2nTS~=IN55LEuuYN; W = zeros(0,4); end + if ifi9~=VDHE; W = zeros(0,4); end end - - function [W,S] = function1(B) - [nR,nC]=size(B); - Bpad=nan(nR+2,nC+2); - Bpad(2:end-1,2:end-1)=B; - Bedit = Bpad; - maxbridges = 4; - if size(Bedit,2) > 20 - cutfirst = 4; - cutsecond = 8; - cutoff = 12; + function [W,kDbn] = LM8m(B) + [Nq6J,O7Bu]=size(B); + AQvl=nan(Nq6J+2,O7Bu+2); + AQvl(2:end-1,2:end-1)=B; + NZ1x = AQvl; + kXSc = 4; + if size(NZ1x,2) > 20 + F2W_ = 4; + lWnB = 8; + VJpA = 12; else - cutfirst = 3; - cutsecond = 7; - cutoff = 11; + F2W_ = 3; + lWnB = 7; + VJpA = 11; end - S = inf; - X1 = [1 2;2 1]; - X2 = [1 3;3 1]; - Y = [3 2 1;1 2 3]; - for x = 1:2 - if x == 2 - [U BU] = phase1_a(Bedit,cutfirst,X1(x,:)); - [UU BUU] = phase3a(BU,U,cutsecond,X2(x,:)); - [V BX] = phase3a(BUU,UU,cutoff,X2(x,:)); - else - [U BU] = phase1_a(Bedit,4,X1(x,:)); - [V BX] = phase3a(BU,U,11,X2(x,:)); - end - for y = 1:2 - if x == 2 && y == 2 && S > 2100, return, end - W1 = phase2_a(Bedit,BX,V,maxbridges,cutoff,Y(y,:))-1; - S1 = mygrade(B,W1); - if S1 <= S - S = S1; - W = W1; - maxbridges = maxbridges - 1; - end - end + kDbn = inf; + s47m = [1 2;2 1]; + X2eY = [1 3;3 1]; + khir = [3 2 1;1 2 3]; + for eQ__ = 1:2 + if eQ__ == 2 + [c9Is hJ9C] = S3xW(NZ1x,F2W_,s47m(eQ__,:)); + [yVAS ZMEI] = O5lH(hJ9C,c9Is,lWnB,X2eY(eQ__,:)); + [g6OY I8Hm] = O5lH(ZMEI,yVAS,VJpA,X2eY(eQ__,:)); + else + [c9Is hJ9C] = S3xW(NZ1x,4,s47m(eQ__,:)); + [g6OY I8Hm] = O5lH(hJ9C,c9Is,11,X2eY(eQ__,:)); end - if nR*nC > 290; return; end - br = sum(W(:,1)==W(:,3)&W(:,2)==W(:,4)); - if br <= 4 - WSH = solverSHa(B); - ssh = mygrade(B,WSH); - if ssh < S - W = WSH; - S = ssh; - end + for vr3N = 1:2 + if eQ__ == 2 && vr3N == 2 && kDbn > 2100, return, end + k2HE = Ihi1(NZ1x,I8Hm,g6OY,kXSc,VJpA,khir(vr3N,:))-1; + NiNx = FLSK(B,k2HE); + if NiNx <= kDbn + kDbn = NiNx; + W = k2HE; + kXSc = kXSc - 1; end end - - - function path = complexpath_a(B,row,col,label,cutoff,maxpathlen) - function path = traceback_a(r,c,pathLength) - pR(r,c) = zR(i); - pC(r,c) = zC(i); - path = zeros(pathLength,4); - for jjj = 1:pathLength - path(jjj,1:2) = [r c]; - preR = pR(r,c); - preC = pC(r,c); - path(jjj,3:4) = [preR preC]; - r = preR; - c = preC; end + if Nq6J*O7Bu > 290; return; end + Kixj = sum(W(:,1)==W(:,3)&W(:,2)==W(:,4)); + if Kixj <= 4 + hjiM = VPIe(B); + D8D9 = FLSK(B,hjiM); + if D8D9 < kDbn + W = hjiM; + kDbn = D8D9; end - [NR NC] = size(B); - pR = zeros(NR,NC); - pC = zeros(NR,NC); - C = -ones(NR,NC); - C(row(2),col(2)) = 0; - C(row(1),col(1)) = -2; - C( B == label ) = -2; - rnext = zeros(NR*NC,1); - cnext = zeros(NR*NC,1); + end + end + function path = kgYf(B,qSqx,zU8N,CCw3,VJpA,sTZh) + function path = PnPZ(Z2SK,uaRQ,ZkWY) + fi1J(Z2SK,uaRQ) = ZgmH(zI4I); + ujHM(Z2SK,uaRQ) = bEnO(zI4I); + path = zeros(ZkWY,4); + for uEFO = 1:ZkWY + path(uEFO,1:2) = [Z2SK uaRQ]; + Mnqa = fi1J(Z2SK,uaRQ); + v06O = ujHM(Z2SK,uaRQ); + path(uEFO,3:4) = [Mnqa v06O]; + Z2SK = Mnqa; + uaRQ = v06O; + end + end + [Mx2v xEDR] = size(B); + fi1J = zeros(Mx2v,xEDR); + ujHM = zeros(Mx2v,xEDR); + g_cm = -ones(Mx2v,xEDR); + g_cm(qSqx(2),zU8N(2)) = 0; + g_cm(qSqx(1),zU8N(1)) = -2; + g_cm( B == CCw3 ) = -2; + kBAn = zeros(Mx2v*xEDR,1); + QrMH = zeros(Mx2v*xEDR,1); count = 1; - rnext(1) = row(2); - cnext(1) = col(2); - dR=[-1 1 0 0]; - dC=[0 0 -1 1]; - for step = 0:min(cutoff,maxpathlen) - if count < 1, break, end - N = count; - zR = rnext; - zC = cnext; - count = 0; - for i = 1:N - Aa2p_xqlDq = zC(i); - zi = zR(i); - for s=1:4 - r = zi + dR(s); - c = Aa2p_xqlDq + dC(s); - Z = r + (c-1)*NR; - tag = C(Z); - if tag == -2 - path = traceback_a(r,c,step+1); - return - elseif tag == -1 && B(Z) == 0 - C(Z) = step+1; - pR(Z) = zi; - pC(Z) = Aa2p_xqlDq; - count = count + 1; rnext(count) = r; cnext(count) = c; - end - end - end + kBAn(1) = qSqx(2); + QrMH(1) = zU8N(2); + yr6M=[-1 1 0 0]; + A6Pg=[0 0 -1 1]; + for step = 0:min(VJpA,sTZh) + if count < 1, break, end + zmNu = count; + ZgmH = kBAn(1:zmNu); + bEnO = QrMH(1:zmNu); + count = 0; + for zI4I = 1:zmNu + pZSY = bEnO(zI4I); + YldY = ZgmH(zI4I); + for ovOI=1:4 + Z2SK = YldY + yr6M(ovOI); + uaRQ = pZSY + A6Pg(ovOI); + Nh5_ = Z2SK + (uaRQ-1)*Mx2v; + bIs9 = g_cm(Nh5_); + if bIs9 == -2 + path = PnPZ(Z2SK,uaRQ,step+1); + return + elseif bIs9 == -1 && B(Nh5_) == 0 + g_cm(Nh5_) = step+1; + fi1J(Nh5_) = YldY; + ujHM(Nh5_) = pZSY; + count = count + 1; kBAn(count) = Z2SK; QrMH(count) = uaRQ; end + end + end + end path = []; end - - - - - function w = solverSHa(b) - p = unique(b); - p(1) = []; - n = zeros(size(p)); - for i = 1:length(n) - n(i) = nnz(p(i) == b(:)); + function zjWQ = VPIe(c1Zf) + WIz6 = unique(c1Zf); + WIz6(1) = []; + b0da = zeros(size(WIz6)); + for zI4I = 1:length(b0da) + b0da(zI4I) = nnz(WIz6(zI4I) == c1Zf(:)); end - for i = 1:length(n) - if n(i) == 1 - b(p(i) == b(:)) = -1; - end + for zI4I = 1:length(b0da) + if b0da(zI4I) == 1 + c1Zf(WIz6(zI4I) == c1Zf(:)) = -1; end - g = zeros(size(b)+2); - bb = repmat(-1,size(g)); - bb(2:end-1,2:end-1) = b; - w = []; - [rr, cc] = find(bb>0); - d = (size(bb,1)/2 - rr).^2 + (size(bb,2)/2 - cc).^2; - [d, order] = sort(d); + end + d1X_ = zeros(size(c1Zf)+2); + V2UY = repmat(-1,size(d1X_)); + V2UY(2:end-1,2:end-1) = c1Zf; + zjWQ = []; + [c6pd, roA0] = find(V2UY>0); + kMO7 = (size(V2UY,1)/2 - c6pd).^2 + (size(V2UY,2)/2 - roA0).^2; + [kMO7, order] = sort(kMO7); order = order'; - for k = 1:length(rr)-1 - bestscore = 0; - minsteps = 32; - for i = order - if g(rr(i), cc(i)) - continue - end - [score, mv, steps] = findBestMove_a(bb, g, rr(i), cc(i), minsteps); - if score > bestscore - bestscore = score; - bestmove = mv; - minsteps = steps; - if minsteps == 1 - break - end - end - end - if bestscore == 0 - w = w - 1; - return - end - g = addwirepath(g, bestmove, bb(bestmove(1,1), bestmove(1,2))); - bb = addwirepath(bb, bestmove, bb(bestmove(1,1), bestmove(1,2))); - w = [w; bestmove]; + for ZqcS = 1:length(c6pd)-1 + qqc3 = 0; + njdQ = 32; + for zI4I = order + if d1X_(c6pd(zI4I), roA0(zI4I)) + continue end - w = w - 1; + [uis5, jSz3, HyOC] = OBOt(V2UY, d1X_, c6pd(zI4I), roA0(zI4I), njdQ); + if uis5 > qqc3 + qqc3 = uis5; + aSQs = jSz3; + njdQ = HyOC; + if njdQ == 1 + break end - - - function [bestscore, bestmove, minsteps] = findBestMove_a(b, g, z, zC, tniOHnFTWS) - bestscore = 0; - bestmove = []; - jjj = [1 -1 0 0]; - k = [0 0 1 -1]; - if ~any(g(:)==b(z,zC)) - g = b; end - bb = b; - bb(bb>0) = -1; - bb(z,zC) = 1; - minsteps = Inf; - p = b(z,zC); - for i = 1:tniOHnFTWS-2 - [rr, cc] = find(bb==i); - for n = 1:length(rr) - for GEOY9vqvEy = 1:4 - Cw4BfzRNQ6 = rr(n) + jjj(GEOY9vqvEy); - qpF1lfOV53 = cc(n) + k(GEOY9vqvEy); - if g(Cw4BfzRNQ6,qpF1lfOV53) == p && ~(Cw4BfzRNQ6 == z && qpF1lfOV53 == zC) - minsteps = i; - break - end - wzyazJbPVF = bb(Cw4BfzRNQ6,qpF1lfOV53); - if wzyazJbPVF == 0 - bb(Cw4BfzRNQ6,qpF1lfOV53) = i+1; - end - end - if minsteps < Inf - break - end - end - if minsteps < Inf - break - end end - if minsteps == Inf - return + if qqc3 == 0 + zjWQ = zjWQ - 1; + return end - bestscore = b(z,zC) - minsteps; - if minsteps == 1 - bestmove = [z, zC, Cw4BfzRNQ6, qpF1lfOV53]; - return + d1X_ = HiNR(d1X_, aSQs, V2UY(aSQs(1,1), aSQs(1,2))); + V2UY = HiNR(V2UY, aSQs, V2UY(aSQs(1,1), aSQs(1,2))); + zjWQ = [zjWQ; aSQs]; end - bestmove = zeros(minsteps,4); - for step = minsteps:-1:1 - for GEOY9vqvEy = 1:4 - RugyNPRQTT = Cw4BfzRNQ6 + jjj(GEOY9vqvEy); - Wlfr8gQkkJ = qpF1lfOV53 + k(GEOY9vqvEy); - if bb(RugyNPRQTT, Wlfr8gQkkJ) == step - break - end - end - bestmove(step,:) = [RugyNPRQTT, Wlfr8gQkkJ, Cw4BfzRNQ6, qpF1lfOV53]; - Cw4BfzRNQ6 = RugyNPRQTT; - qpF1lfOV53 = Wlfr8gQkkJ; + zjWQ = zjWQ - 1; end + function [qqc3, aSQs, njdQ] = OBOt(c1Zf, d1X_, dnn1, bEnO, fw0B) + qqc3 = 0; + aSQs = []; + uEFO = [1 -1 0 0]; + ZqcS = [0 0 1 -1]; + if ~any(d1X_(:)==c1Zf(dnn1,bEnO)) + d1X_ = c1Zf; end - - - function [W B] = phase1_a(B,cutoff,rz) + V2UY = c1Zf; + V2UY(V2UY>0) = -1; + V2UY(dnn1,bEnO) = 1; + njdQ = Inf; + WIz6 = c1Zf(dnn1,bEnO); + for zI4I = 1:fw0B-2 + [c6pd, roA0] = find(V2UY==zI4I); + for b0da = 1:length(c6pd) + for iuMJ = 1:4 + nZqJ = c6pd(b0da) + uEFO(iuMJ); + QldI = roA0(b0da) + ZqcS(iuMJ); + if d1X_(nZqJ,QldI) == WIz6 && ~(nZqJ == dnn1 && QldI == bEnO) + njdQ = zI4I; + break + end + J9uY = V2UY(nZqJ,QldI); + if J9uY == 0 + V2UY(nZqJ,QldI) = zI4I+1; + end + end + if njdQ < Inf + break + end + end + if njdQ < Inf + break + end + end + if njdQ == Inf + return + end + qqc3 = c1Zf(dnn1,bEnO) - njdQ; + if njdQ == 1 + aSQs = [dnn1, bEnO, nZqJ, QldI]; + return + end + aSQs = zeros(njdQ,4); + for step = njdQ:-1:1 + for iuMJ = 1:4 + SLuI = nZqJ + uEFO(iuMJ); + enii = QldI + ZqcS(iuMJ); + if V2UY(SLuI, enii) == step + break + end + end + aSQs(step,:) = [SLuI, enii, nZqJ, QldI]; + nZqJ = SLuI; + QldI = enii; + end + end + function [W B] = S3xW(B,VJpA,K6jX) W = []; - [pincount k] = analyzeboard(B,rz); - if k < 1 - return + [HoTv ZqcS] = lBA0(B,K6jX); + if ZqcS < 1 + return end - pincount=sortrows(pincount,-rz); - for i = 1:k - if pincount(i,2) >= 2 - p = pincount(i,1); - [row col] = find(B == p); - N = size(row,1); - Npairs = N*(N-1)/2; - dist = zeros(Npairs,3); - x = 0; - for a = 1:N - for b = (a+1):N - x = x + 1; - dist(x,1) = a; - dist(x,2) = b; - dist(x,3) = abs(row(a)-row(b)) + abs(col(a)-col(b)); - end - end - [d ix] = sort(dist(:,3)); - dist = dist(ix,:); - qfUlAeE6ke = reshape(dist(:,1:2)',[],1); - npins = 0; - qYyU89IINf = 1; - OEmC4q5N3Q = false(N,1); - for i=1:N - lNue6SeFoq = find( ~OEmC4q5N3Q(qfUlAeE6ke(qYyU89IINf:end)) , 1 , 'first'); - if isempty(lNue6SeFoq) - break - end - a = qfUlAeE6ke(lNue6SeFoq); - Distance = abs(row([1:a-1,a+1:end]')-row(a)) + abs(col([1:a-1,a+1:end]')-col(a)); - if max(Distance)>cutoff-1 - break - end - path = DqbHRtn5ft(B,row(a),col(a),row([1:a-1,a+1:end]'),col([1:a-1,a+1:end]'), -p, cutoff, 2*p); - if size(path,1) > 0 - W = [W; path]; - B = addwirepath(B,path,-p); - npins = 2; - break - end - end - if npins < 2 - continue - end - for jjj = 3:N - [row2 col2] = find(B == -p); - [row col] = find(B == p); - [AM3xhXGopY,pXUGUzzwiB] = meshgrid(row,row2); - [sb9p2RYeiU,Je3dFDJNL9] = meshgrid(row,row2); - Distance = abs(AM3xhXGopY-pXUGUzzwiB) + abs(sb9p2RYeiU-Je3dFDJNL9); - if max(Distance(:))>cutoff-1 - break - end - path = DqbHRtn5ft(B,row2,col2,row,col, -p, cutoff, 2*p); - if size(path,1) > 0 - W = [W; path]; - B = addwirepath(B,path,-p); - connected = true; - else - break - end - end - end + HoTv=sortrows(HoTv,-K6jX); + for zI4I = 1:ZqcS + if HoTv(zI4I,2) >= 2 + WIz6 = HoTv(zI4I,1); + [qSqx zU8N] = find(B == WIz6); + zmNu = size(qSqx,1); + t3ja = zmNu*(zmNu-1)/2; + dist = zeros(t3ja,3); + eQ__ = 0; + for V7Jc = 1:zmNu + for c1Zf = (V7Jc+1):zmNu + eQ__ = eQ__ + 1; + dist(eQ__,1) = V7Jc; + dist(eQ__,2) = c1Zf; + dist(eQ__,3) = abs(qSqx(V7Jc)-qSqx(c1Zf)) + abs(zU8N(V7Jc)-zU8N(c1Zf)); end end - - - function [W B] = phase3a(B,W,XDfVAc3Mmp,rz) - [pincount k] = analyzeboard(B,rz); - if k < 1, return, end - pincount=sortrows(pincount,-rz); - for i = 1:k - p = pincount(i,1); - Npinwires = sum(B == -p); - if Npinwires == 0 - if pincount(i,2) >= 2 - [row col] = find(B == p); - N = size(row,1); - Npairs = N*(N-1)/2; - dist = zeros(Npairs,3); - x = 0; - for a = 1:N - for b = (a+1):N - x = x + 1; - dist(x,1) = a; - dist(x,2) = b; - dist(x,3) = abs(row(a)-row(b)) + abs(col(a)-col(b)); - end - end - [d ix] = sort(dist(:,3)); - dist = dist(ix,:); - maxstep = min(XDfVAc3Mmp,2*p+1); - connected = false; - for x = 1:Npairs - if dist(x,3) > maxstep+1 - break - end - a = dist(x,1); - b = dist(x,2); - path = complexpath_a(B,[row(a); row(b)], [col(a); col(b)], -p, XDfVAc3Mmp, 2*p); - if size(path,1) > 0 - W = [W; path]; - B = addwirepath(B,path,-p); - connected = true; - break - end - end - if ~connected - continue - end - end - end - [row col] = find(B == p); - wibFptvq9Y = size(row,1); - maxstep = min(XDfVAc3Mmp,p+1); - for jjj = 1:wibFptvq9Y - [row2 col2] = find(B == -p); - [row col] = find(B == p); - connected = false; - path = DqbHRtn5ft(B,row2,col2,row,col, -p, XDfVAc3Mmp, p); - if size(path,1) > 0 - W = [W; path]; - B = addwirepath(B,path,-p); - connected = true; - end - if ~connected - break - end - end + [kMO7 nnda] = sort(dist(:,3)); + dist = dist(nnda,:); + VqKG = reshape(dist(:,1:2)',[],1); + xFSz = 0; + qXy_ = 1; + zycF = false(zmNu,1); + for zI4I=1:zmNu + r5rP = find( ~zycF(VqKG(qXy_:end)) , 1 , 'first'); + if isempty(r5rP) + break end + V7Jc = VqKG(r5rP); + Distance = abs(qSqx([1:V7Jc-1,V7Jc+1:end]')-qSqx(V7Jc)) + abs(zU8N([1:V7Jc-1,V7Jc+1:end]')-zU8N(V7Jc)); + if max(Distance)>VJpA-1 + break end - - - function [W B] = phase2_a(Bpad,B,W,maxbridges,XDfVAc3Mmp,rz) - function hr2OdLy5K5() - for w = 1:size(path,1); - if path(w,1) == path(w,3) - YTx56DA5U8(path(w,1),path(w,2)) = false; - YTx56DA5U8(path(w,3),path(w,4)) = false; - if path(w,2) == path(w,4) - B(path(w,1),path(w,2)) = -9999; - end - end - if path(w,2) == path(w,4) - P9_FTG1hds(path(w,1),path(w,2)) = false; - P9_FTG1hds(path(w,3),path(w,4)) = false; - end + path = KJ4C(B,qSqx(V7Jc),zU8N(V7Jc),qSqx([1:V7Jc-1,V7Jc+1:end]'),zU8N([1:V7Jc-1,V7Jc+1:end]'), -WIz6, VJpA, 2*WIz6); + if size(path,1) > 0 + W = [W; path]; + B = HiNR(B,path,-WIz6); + xFSz = 2; + break end end - [YTx56DA5U8 P9_FTG1hds] = buildbridges(Bpad,B,W); - [pincount k] = analyzeboard(B,rz); - if k < 1, return, end - pincount=sortrows(pincount,-rz); - for i = 1:k - p = pincount(i,1); - Npinwires = sum(B == -p); - if Npinwires == 0 - if pincount(i,2) >= 2 - [row col] = find(B == p); - N = size(row,1); - Npairs = N*(N-1)/2; - dist = zeros(Npairs,3); - x = 0; - for a = 1:N - for b = (a+1):N - x = x + 1; - dist(x,1) = a; - dist(x,2) = b; - dist(x,3) = abs(row(a)-row(b)) + abs(col(a)-col(b)); - end - end - [d ix] = sort(dist(:,3)); - dist = dist(ix,:); - maxstep = min((maxbridges*25)+XDfVAc3Mmp,2*p+1); - connected = false; - for x = 1:Npairs - if dist(x,3) > maxstep+1 - break - end - a = dist(x,1); - b = dist(x,2); - path = bridgepath(B,YTx56DA5U8,P9_FTG1hds,[row(a); row(b)], [col(a); col(b)], -p, maxbridges, XDfVAc3Mmp, 2*p); - if size(path,1) > 0 - W = [W; path]; - B = addwirepath(B,path,-p); - hr2OdLy5K5(); - connected = true; - break - end - end - if ~connected - continue - end - end - end - row = find(B == p); - wibFptvq9Y = size(row,1); - % maxstep = min((maxbridges*25)+XDfVAc3Mmp,p+1); - for jjj = 1:wibFptvq9Y - z2 = find(B == -p); - z = find(B == p); - connected = false; - path = d4TZerDbiG(B,YTx56DA5U8,P9_FTG1hds,z2,z, maxbridges, XDfVAc3Mmp, p); - if size(path,1) > 0 - W = [W; path]; - B = addwirepath(B,path,-p); - hr2OdLy5K5(); - connected = true; - end - if ~connected - break - end - end + if xFSz < 2 + continue end + for uEFO = 3:zmNu + [JD76 cAKS] = find(B == -WIz6); + [qSqx zU8N] = find(B == WIz6); + [UMgr,tfll] = meshgrid(qSqx,JD76); + [cmCy,xH3l] = meshgrid(qSqx,JD76); + Distance = abs(UMgr-tfll) + abs(cmCy-xH3l); + if max(Distance(:))>VJpA-1 + break end - - %% - function path = d4TZerDbiG(B,BH,BV,zS,zT,maxbridges,kappa,maxpathlen) - function path = traceback_b(Z,step) - PZ(Z) = zi; - r=mod(Z,NR); - c=ceil(Z/NR); - path = zeros(step,4); - jjj = 0; - - while ~any(zS==Z) - jjj = jjj + 1; - path(jjj,1:2) = [r c]; - Z = PZ(Z); - r=mod(Z,NR); - c=ceil(Z/NR); - path(jjj,3:4) = [r c]; - if BRIDGE(r,c) - jjj = jjj + 1; - path(jjj,:) = [r c r c]; - end - end - path = path(1:jjj,:); - end - [NR NC] = size(B); - BRIDGE = false(NR,NC); - PZ = zeros(NR,NC); - C = -ones(NR,NC); - C(zS) = 0; - C(zT) = -2; - maxstep = min((maxbridges*25)+kappa,maxpathlen+1); - nextstep = zeros(maxstep+26,1); + path = KJ4C(B,JD76,cAKS,qSqx,zU8N, -WIz6, VJpA, 2*WIz6); + if size(path,1) > 0 + W = [W; path]; + B = HiNR(B,path,-WIz6); + CwmX = true; + else + break + end + end + end + end + end + function [W B] = O5lH(B,W,FIUo,K6jX) + [HoTv ZqcS] = lBA0(B,K6jX); + if ZqcS < 1, return, end + HoTv=sortrows(HoTv,-K6jX); + for zI4I = 1:ZqcS + WIz6 = HoTv(zI4I,1); + PnbN = sum(B == -WIz6); + if PnbN == 0 + if HoTv(zI4I,2) >= 2 + [qSqx zU8N] = find(B == WIz6); + zmNu = size(qSqx,1); + t3ja = zmNu*(zmNu-1)/2; + dist = zeros(t3ja,3); + eQ__ = 0; + for V7Jc = 1:zmNu + for c1Zf = (V7Jc+1):zmNu + eQ__ = eQ__ + 1; + dist(eQ__,1) = V7Jc; + dist(eQ__,2) = c1Zf; + dist(eQ__,3) = abs(qSqx(V7Jc)-qSqx(c1Zf)) + abs(zU8N(V7Jc)-zU8N(c1Zf)); + end + end + [kMO7 nnda] = sort(dist(:,3)); + dist = dist(nnda,:); + maxstep = min(FIUo,2*WIz6+1); + CwmX = false; + for eQ__ = 1:t3ja + if dist(eQ__,3) > maxstep+1 + break + end + V7Jc = dist(eQ__,1); + c1Zf = dist(eQ__,2); + path = kgYf(B,[qSqx(V7Jc); qSqx(c1Zf)], [zU8N(V7Jc); zU8N(c1Zf)], -WIz6, FIUo, 2*WIz6); + if size(path,1) > 0 + W = [W; path]; + B = HiNR(B,path,-WIz6); + CwmX = true; + break + end + end + if ~CwmX + continue + end + end + end + [qSqx zU8N] = find(B == WIz6); + Iing = size(qSqx,1); + maxstep = min(FIUo,WIz6+1); + for uEFO = 1:Iing + [JD76 cAKS] = find(B == -WIz6); + [qSqx zU8N] = find(B == WIz6); + CwmX = false; + path = KJ4C(B,JD76,cAKS,qSqx,zU8N, -WIz6, FIUo, WIz6); + if size(path,1) > 0 + W = [W; path]; + B = HiNR(B,path,-WIz6); + CwmX = true; + end + if ~CwmX + break + end + end + end + end + function [W B] = Ihi1(AQvl,B,W,kXSc,FIUo,K6jX) + function G9hM() + for zjWQ = 1:size(path,1); + if path(zjWQ,1) == path(zjWQ,3) + q8aj(path(zjWQ,1),path(zjWQ,2)) = false; + q8aj(path(zjWQ,3),path(zjWQ,4)) = false; + if path(zjWQ,2) == path(zjWQ,4) + B(path(zjWQ,1),path(zjWQ,2)) = -9999; + end + end + if path(zjWQ,2) == path(zjWQ,4) + NNQe(path(zjWQ,1),path(zjWQ,2)) = false; + NNQe(path(zjWQ,3),path(zjWQ,4)) = false; + end + end + end + [q8aj NNQe] = jVc6(AQvl,B,W); + [HoTv ZqcS] = lBA0(B,K6jX); + if ZqcS < 1, return, end + HoTv=sortrows(HoTv,-K6jX); + for zI4I = 1:ZqcS + WIz6 = HoTv(zI4I,1); + PnbN = sum(B == -WIz6); + if PnbN == 0 + if HoTv(zI4I,2) >= 2 + [qSqx zU8N] = find(B == WIz6); + zmNu = size(qSqx,1); + t3ja = zmNu*(zmNu-1)/2; + dist = zeros(t3ja,3); + eQ__ = 0; + for V7Jc = 1:zmNu + for c1Zf = (V7Jc+1):zmNu + eQ__ = eQ__ + 1; + dist(eQ__,1) = V7Jc; + dist(eQ__,2) = c1Zf; + dist(eQ__,3) = abs(qSqx(V7Jc)-qSqx(c1Zf)) + abs(zU8N(V7Jc)-zU8N(c1Zf)); + end + end + [kMO7 nnda] = sort(dist(:,3)); + dist = dist(nnda,:); + maxstep = min((kXSc*25)+FIUo,2*WIz6+1); + CwmX = false; + for eQ__ = 1:t3ja + if dist(eQ__,3) > maxstep+1 + break + end + V7Jc = dist(eQ__,1); + c1Zf = dist(eQ__,2); + path = UGXX(B,q8aj,NNQe,[qSqx(V7Jc); qSqx(c1Zf)], [zU8N(V7Jc); zU8N(c1Zf)], -WIz6, kXSc, FIUo, 2*WIz6); + if size(path,1) > 0 + W = [W; path]; + B = HiNR(B,path,-WIz6); + G9hM(); + CwmX = true; + break + end + end + if ~CwmX + continue + end + end + end + [qSqx zU8N] = find(B == WIz6); + Iing = size(qSqx,1); + maxstep = min((kXSc*25)+FIUo,WIz6+1); + for uEFO = 1:Iing + [JD76 cAKS] = find(B == -WIz6); + [qSqx zU8N] = find(B == WIz6); + CwmX = false; + path = lHl9(B,q8aj,NNQe,JD76,cAKS,qSqx,zU8N, -WIz6, kXSc, FIUo, WIz6); + if size(path,1) > 0 + W = [W; path]; + B = HiNR(B,path,-WIz6); + G9hM(); + CwmX = true; + end + if ~CwmX + break + end + end + end + end + function path = lHl9(B,q8aj,NNQe,rowS,colS,vP4X,z7kn,CCw3,kXSc,FIUo,sTZh) + [Mx2v xEDR] = size(B); + PhqC = false(Mx2v,xEDR); + cqHi = zeros(Mx2v,xEDR); + g_cm = -ones(Mx2v,xEDR); + g_cm(rowS + (colS-1)*Mx2v) = 0; + g_cm(vP4X + (z7kn-1)*Mx2v) = -2; + maxstep = min((kXSc*25)+FIUo,sTZh+1); + WRHy = zeros(maxstep+26,1); for step = 0:maxstep - if step == 0 - z = zS; - elseif nextstep(step) == 0 - continue - else - z = find(C == step); - end - N = numel(z); - for i = 1:N - zi = z(i); - Z = zi - NR; - tag = C(Z); - if tag == -2 - path = traceback_b(Z,step+1); - return - elseif tag == -1 - if B(Z) == 0 - C(Z) = step+1; nextstep(step+1) = 1; - PZ(Z) = zi; - elseif BH(Z) - C(Z) = step+26; nextstep(step+26) = 1; - PZ(Z) = zi; - BRIDGE(Z) = true; - end - end - Z = zi + NR; - tag = C(Z); - if tag == -2 - path = traceback_b(Z,step+1); - return - elseif tag == -1 - if B(Z) == 0 - C(Z) = step+1; nextstep(step+1) = 1; - PZ(Z) = zi; - elseif BH(Z) - C(Z) = step+26; nextstep(step+26) = 1; - PZ(Z) = zi; - BRIDGE(Z) = true; - end - end - Z = zi - 1; - tag = C(Z); - if tag == -2 - path = traceback_b(Z,step+1); - return - elseif tag == -1 - if B(Z) == 0 - C(Z) = step+1; nextstep(step+1) = 1; - PZ(Z) = zi; - elseif BV(Z) - C(Z) = step+26; nextstep(step+26) = 1; - PZ(Z) = zi; - BRIDGE(Z) = true; - end - end - Z = zi + 1; - tag = C(Z); - if tag == -2 - path = traceback_b(Z,step+1); - return - elseif tag == -1 - if B(Z) == 0 - C(Z) = step+1; nextstep(step+1) = 1; - PZ(Z) = zi; - elseif BV(Z) - C(Z) = step+26; nextstep(step+26) = 1; - PZ(Z) = zi; - BRIDGE(Z) = true; - end - end - end + if step == 0 + BQ5z = rowS + (colS-1)*Mx2v; + elseif WRHy(step) == 0 + continue + else + BQ5z = find(g_cm == step); end + zmNu = numel(BQ5z); + for zI4I = 1:zmNu + uIiD = BQ5z(zI4I); + Nh5_ = uIiD - Mx2v; + bIs9 = g_cm(Nh5_); + if bIs9 == -2 + step=step+1; + cqHi(Nh5_) = uIiD; + Z2SK=mod(Nh5_,Mx2v); + uaRQ=ceil(Nh5_/Mx2v); + path = zeros(step,4); + uEFO = 0; + while isempty(find(rowS==Z2SK & colS==uaRQ,1)) + uEFO = uEFO + 1; + path(uEFO,1:2) = [Z2SK uaRQ]; + Nh5_ = Z2SK + (uaRQ-1)*Mx2v; + fJeJ = cqHi(Nh5_); + Mnqa=mod(fJeJ,Mx2v); + v06O=ceil(fJeJ/Mx2v); + path(uEFO,3:4) = [Mnqa v06O]; + Z2SK = Mnqa; + uaRQ = v06O; + if PhqC(Z2SK,uaRQ) + uEFO = uEFO + 1; + path(uEFO,:) = [Z2SK uaRQ Z2SK uaRQ]; + end + end + path = path(1:uEFO,:); + return + end + if bIs9 == -1 + if B(Nh5_) == 0 + g_cm(Nh5_) = step+1; WRHy(step+1) = 1; + cqHi(Nh5_) = uIiD; + elseif q8aj(Nh5_) + g_cm(Nh5_) = step+26; WRHy(step+26) = 1; + cqHi(Nh5_) = uIiD; + PhqC(Nh5_) = true; + end + end + Nh5_ = uIiD + Mx2v; + bIs9 = g_cm(Nh5_); + if bIs9 == -2 + step=step+1; + cqHi(Nh5_) = uIiD; + Z2SK=mod(Nh5_,Mx2v); + uaRQ=ceil(Nh5_/Mx2v); + path = zeros(step,4); + uEFO = 0; + while isempty(find(rowS==Z2SK & colS==uaRQ,1)) + uEFO = uEFO + 1; + path(uEFO,1:2) = [Z2SK uaRQ]; + Nh5_ = Z2SK + (uaRQ-1)*Mx2v; + fJeJ = cqHi(Nh5_); + Mnqa=mod(fJeJ,Mx2v); + v06O=ceil(fJeJ/Mx2v); + path(uEFO,3:4) = [Mnqa v06O]; + Z2SK = Mnqa; + uaRQ = v06O; + if PhqC(Z2SK,uaRQ) + uEFO = uEFO + 1; + path(uEFO,:) = [Z2SK uaRQ Z2SK uaRQ]; + end + end + path = path(1:uEFO,:); + return + end + if bIs9 == -1 + if B(Nh5_) == 0 + g_cm(Nh5_) = step+1; WRHy(step+1) = 1; + cqHi(Nh5_) = uIiD; + elseif q8aj(Nh5_) + g_cm(Nh5_) = step+26; WRHy(step+26) = 1; + cqHi(Nh5_) = uIiD; + PhqC(Nh5_) = true; + end + end + Nh5_ = uIiD - 1; + bIs9 = g_cm(Nh5_); + if bIs9 == -2 + step=step+1; + cqHi(Nh5_) = uIiD; + Z2SK=mod(Nh5_,Mx2v); + uaRQ=ceil(Nh5_/Mx2v); + path = zeros(step,4); + uEFO = 0; + while isempty(find(rowS==Z2SK & colS==uaRQ,1)) + uEFO = uEFO + 1; + path(uEFO,1:2) = [Z2SK uaRQ]; + Nh5_ = Z2SK + (uaRQ-1)*Mx2v; + fJeJ = cqHi(Nh5_); + Mnqa=mod(fJeJ,Mx2v); + v06O=ceil(fJeJ/Mx2v); + path(uEFO,3:4) = [Mnqa v06O]; + Z2SK = Mnqa; + uaRQ = v06O; + if PhqC(Z2SK,uaRQ) + uEFO = uEFO + 1; + path(uEFO,:) = [Z2SK uaRQ Z2SK uaRQ]; + end + end + path = path(1:uEFO,:); + return + end + if bIs9 == -1 + if B(Nh5_) == 0 + g_cm(Nh5_) = step+1; WRHy(step+1) = 1; + cqHi(Nh5_) = uIiD; + elseif NNQe(Nh5_) + g_cm(Nh5_) = step+26; WRHy(step+26) = 1; + cqHi(Nh5_) = uIiD; + PhqC(Nh5_) = true; + end + end + Nh5_ = uIiD + 1; + bIs9 = g_cm(Nh5_); + if bIs9 == -2 + step=step+1; + cqHi(Nh5_) = uIiD; + Z2SK=mod(Nh5_,Mx2v); + uaRQ=ceil(Nh5_/Mx2v); + path = zeros(step,4); + uEFO = 0; + while isempty(find(rowS==Z2SK & colS==uaRQ,1)) + uEFO = uEFO + 1; + path(uEFO,1:2) = [Z2SK uaRQ]; + Nh5_ = Z2SK + (uaRQ-1)*Mx2v; + fJeJ = cqHi(Nh5_); + Mnqa=mod(fJeJ,Mx2v); + v06O=ceil(fJeJ/Mx2v); + path(uEFO,3:4) = [Mnqa v06O]; + Z2SK = Mnqa; + uaRQ = v06O; + if PhqC(Z2SK,uaRQ) + uEFO = uEFO + 1; + path(uEFO,:) = [Z2SK uaRQ Z2SK uaRQ]; + end + end + path = path(1:uEFO,:); + return + end + if bIs9 == -1 + if B(Nh5_) == 0 + g_cm(Nh5_) = step+1; WRHy(step+1) = 1; + cqHi(Nh5_) = uIiD; + elseif NNQe(Nh5_) + g_cm(Nh5_) = step+26; WRHy(step+26) = 1; + cqHi(Nh5_) = uIiD; + PhqC(Nh5_) = true; + end + end + end + end path = zeros(0,4); end - - function path = DqbHRtn5ft(B,rowS,colS,FIg5RLlRYM,bX69T9QEhw,label,cutoff,maxpathlen) - % function path = traceback_a(r,c,pathLength) - % pR(r,c) = zR(i); - % pC(r,c) = zC(i); - % path = zeros(pathLength,4); - % for jjj = 1:pathLength - % path(jjj,1:2) = [r c]; - % preR = pR(r,c); - % preC = pC(r,c); - % path(jjj,3:4) = [preR preC]; - % r = preR; - % c = preC; - % end - % end - [NR NC] = size(B); - pR = zeros(NR,NC); - pC = zeros(NR,NC); - C = -ones(NR,NC); - C(rowS+(colS-1)*NR) = 0; - C(FIg5RLlRYM+(bX69T9QEhw-1)*NR) = -2; - znext = zeros(NR*NC,1); - cnext = zeros(NR*NC,1); + function path = KJ4C(B,rowS,colS,vP4X,z7kn,CCw3,VJpA,sTZh) + [Mx2v xEDR] = size(B); + fi1J = zeros(Mx2v,xEDR); + ujHM = zeros(Mx2v,xEDR); + g_cm = -ones(Mx2v,xEDR); + g_cm(rowS+(colS-1)*Mx2v) = 0; + g_cm(vP4X+(z7kn-1)*Mx2v) = -2; + bNZ0 = zeros(Mx2v*xEDR,1); + QrMH = zeros(Mx2v*xEDR,1); count = numel(rowS); - znext(1:count) = rowS; - cnext(1:count) = colS; - dR=[-1 1 0 0]; - dC=[0 0 -1 1]; - for step = 0:min(cutoff,maxpathlen) - if count < 1, break, end - N = count; - zR = znext; - zC = cnext; - count = 0; - for i = 1:N - Aa2p_xqlDq = zC(i); - zi = zR(i); - for s=1:4 - r = zi + dR(s); - c = Aa2p_xqlDq + dC(s); - Z = r + (c-1)*NR; - tag = C(Z); - if tag == -2 - %path = traceback_a(r,c,step+1); - pathLength=step+1; - pR(r,c) = zR(i); - pC(r,c) = zC(i); - path = zeros(pathLength,4); - for jjj = 1:pathLength - path(jjj,1:2) = [r c]; - preR = pR(r,c); - preC = pC(r,c); - path(jjj,3:4) = [preR preC]; - r = preR; - c = preC; - end - return - end - if tag == -1 && B(Z) == 0 - C(Z) = step+1; - pR(Z) = zi; - pC(Z) = Aa2p_xqlDq; - count = count + 1; znext(count) = r; cnext(count) = c; - end - end - end + bNZ0(1:count) = rowS; + QrMH(1:count) = colS; + yr6M=[-1 1 0 0]; + A6Pg=[0 0 -1 1]; + for step = 0:min(VJpA,sTZh) + if count < 1, break, end + zmNu = count; + ZgmH = bNZ0(1:zmNu); + bEnO = QrMH(1:zmNu); + count = 0; + for zI4I = 1:zmNu + pZSY = bEnO(zI4I); + YldY = ZgmH(zI4I); + for ovOI=1:4 + Z2SK = YldY + yr6M(ovOI); + uaRQ = pZSY + A6Pg(ovOI); + Nh5_ = Z2SK + (uaRQ-1)*Mx2v; + bIs9 = g_cm(Nh5_); + if bIs9 == -2 + ZkWY=step+1; + fi1J(Z2SK,uaRQ) = ZgmH(zI4I); + ujHM(Z2SK,uaRQ) = bEnO(zI4I); + path = zeros(ZkWY,4); + for uEFO = 1:ZkWY + path(uEFO,1:2) = [Z2SK uaRQ]; + Mnqa = fi1J(Z2SK,uaRQ); + v06O = ujHM(Z2SK,uaRQ); + path(uEFO,3:4) = [Mnqa v06O]; + Z2SK = Mnqa; + uaRQ = v06O; end + return + end + if bIs9 == -1 && B(Nh5_) == 0 + g_cm(Nh5_) = step+1; + fi1J(Nh5_) = YldY; + ujHM(Nh5_) = pZSY; + count = count + 1; bNZ0(count) = Z2SK; QrMH(count) = uaRQ; + end + end + end + end path = []; - end+ end