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;
+ iuOC=2951;
+ ZcGA = rand(43,1);
+ W=WY0q(B);
+ jSuI = tYbV(B,W);
+ [EmY7,OClo] = size(B);
+ JSYZ = B(EmY7:-1:1,:);
+ JSYZ = JSYZ.';
+ [Q6M0,AdvF] = AjqW(JSYZ,[1 2],[1 2],4*EmY7*OClo);
+ if jSuI > AdvF
+ W = [EmY7-Q6M0(:,2)+1 Q6M0(:,1) EmY7-Q6M0(:,4)+1 Q6M0(:,3)];
+ jSuI=AdvF;
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;
+ OfZA=rand('state');
+ rand(iuOC,1);
+ if jSuI>1000 && rand<.5
+ [Q6M0,AdvF] = AjqW(JSYZ,[1 2],[1 2],4*EmY7*OClo);
+ if jSuI > AdvF
+ W = [EmY7-Q6M0(:,2)+1 Q6M0(:,1) EmY7-Q6M0(:,4)+1 Q6M0(:,3)];
+ jSuI=AdvF;
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;
+ if jSuI>1000 && rand<.5
+ [Q6M0,AdvF] = AjqW(JSYZ,[1 2],[1 2],4*EmY7*OClo);
+ if jSuI > AdvF
+ W = [EmY7-Q6M0(:,2)+1 Q6M0(:,1) EmY7-Q6M0(:,4)+1 Q6M0(:,3)];
+ jSuI=AdvF;
+ end
+ end
+ rand('state',OfZA);
+ end
+ function [W,jSuI] = AjqW(c8Aj,L35k,UXE4,ko8J)
+ [LtPW,fo1h]=size(c8Aj);
+ uOhj= -ones(LtPW+2,fo1h+2);
+ uOhj(2:end-1,2:end-1)=c8Aj;
+ AnrP = uOhj;
+ kdz8 = 4;
+ if size(AnrP,2) > 20
+ tOCB = 4;
+ Pspq = 8;
+ BCuq = 18;
else
- cutfirst = 3;
- cutsecond = 7;
- cutoff = 13;
+ tOCB = 3;
+ Pspq = 7;
+ BCuq = 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
+ jSuI = inf;
+ rwEQ = [1 2;2 1];
+ wzEq = [1 3;3 1];
+ a11Y = [3 2 1;1 2 3];
+ for HsUC = L35k
+ if HsUC == 2
+ [OzZf VY9l] = rCrn(AnrP,tOCB,rwEQ(HsUC,:));
+ [vSzv hm9_] = XRUu(VY9l,OzZf,Pspq,wzEq(HsUC,:));
+ [CdAJ RpMJ] = XRUu(hm9_,vSzv,BCuq,wzEq(HsUC,:));
+ else
+ [OzZf VY9l] = rCrn(AnrP,4,rwEQ(HsUC,:));
+ [CdAJ RpMJ] = XRUu(VY9l,OzZf,11,wzEq(HsUC,:));
end
+ for Ajr5 = UXE4
+ TB69 = nXRQ(AnrP,RpMJ,CdAJ,kdz8,BCuq,a11Y(Ajr5,:))-1;
+ RZJ5 = tYbV(c8Aj,TB69);
+ if RZJ5 <= jSuI
+ jSuI = RZJ5;
+ W = TB69;
+ kdz8 = kdz8 - 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 X3nO = tYbV(B,W)
+ LtPW=size(B,1);
+ B(W(:,1)+(W(:,2)-1)*LtPW)=0;
+ B(W(:,3)+(W(:,4)-1)*LtPW)=0;
+ X3nO=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 [ulTm d80F] = ciOU(B,dI5O)
+ jJzi = sort(B(B>0),'descend');
+ P0pr = size(jJzi,1);
+ if P0pr < 1
+ ulTm = [];
+ d80F = 0;
+ return
+ end
+ QRhp=jJzi(diff([0;jJzi])~=0);
+ ulTm = zeros(nnz(QRhp),3);
+ cr3O=histc(jJzi,QRhp(end:-1:1));
+ ulTm(:,1)=QRhp;
+ ulTm(:,2)=cr3O(end:-1:1);
+ d80F=nnz(QRhp);
+ if dI5O < 3, return, end
+ for Hxm_ = 1:d80F
+ if ulTm(Hxm_,2) >= 2
+ YxFZ = ulTm(Hxm_,1);
+ [tNlO rSII] = find(B == YxFZ);
+ CADa = 0;
+ BdmU = size(tNlO,1);
+ CADa=sum(abs(diff(tNlO))+abs(diff(rSII)));
+ ulTm(Hxm_,3) = ulTm(Hxm_,2)*YxFZ - 0.85 * CADa;
+ end
+ end
+ end
+ function [W B] = rCrn(B,BCuq,dI5O)
W = [];
-
- [pincount k] = analyzeboard(B,rz);
-
- if k < 1
- return
+ [ulTm d80F] = ciOU(B,dI5O);
+ if d80F < 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
+ ulTm=sortrows(ulTm,-dI5O);
+ for Hxm_ = 1:d80F
+ if ulTm(Hxm_,2) >= 2
+ YxFZ = ulTm(Hxm_,1);
+ [tNlO rSII] = find(B == YxFZ);
+ BdmU = size(tNlO,1);
+ yF3s = BdmU*(BdmU-1)/2;
+ dist = zeros(yF3s,3);
+ [w86I ChO8]=find(tril(ones(BdmU),-1));
+ dist(:,1)=ChO8;
+ dist(:,2)=w86I;
+ dist(:,3)=abs(rSII(w86I)-rSII(ChO8))+abs(tNlO(w86I)-tNlO(ChO8));
+ [CADa nn1W] = sort(dist(:,3));
+ dist = dist(nn1W,:);
+ P0pr = 0;
+ for HsUC = 1:yF3s
+ if dist(HsUC,3) > BCuq+1
+ break
end
+ HFvX = dist(HsUC,1);
+ ZFaZ = dist(HsUC,2);
+ path = T7jd(B,[tNlO(HFvX); tNlO(ZFaZ)], [rSII(HFvX); rSII(ZFaZ)], -YxFZ, BCuq, 2*YxFZ);
+ if size(path,1) > 0
+ W = [W; path];
+ B = dx3s(B,path,-YxFZ);
+ P0pr = 2;
+ edit = [1:(HFvX-1) (HFvX+1):(ZFaZ-1) (ZFaZ+1):BdmU];
+ tNlO = [tNlO(HFvX); tNlO(ZFaZ); tNlO(edit)];
+ rSII = [rSII(HFvX); rSII(ZFaZ); rSII(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 P0pr < 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 g_Np = 3:BdmU
+ [LFdA gAyR] = find(B == -YxFZ);
+ TxhE = size(LFdA,1);
+ yF3s = TxhE * (BdmU - P0pr);
+ uIQy = (1:TxhE*BdmU)';
+ ZFaZ=mod(uIQy-1,BdmU)+1;
+ HFvX=ceil(uIQy/BdmU);
+ y05c = (ZFaZ>P0pr);
+ HFvX = HFvX(y05c);
+ ZFaZ = ZFaZ(y05c);
+ CADa = abs(LFdA(HFvX)-tNlO(ZFaZ)) + abs(gAyR(HFvX)-rSII(ZFaZ));
+ dist = [HFvX,ZFaZ,CADa];
+ [CADa nn1W] = sort(dist(:,3));
+ dist = dist(nn1W,:);
+ FOa2 = false(BdmU,1);
+ ej96 = false;
+ for HsUC = 1:yF3s
+ if dist(HsUC,3) > BCuq+1
+ break
end
-
+ ZFaZ = dist(HsUC,2);
+ if FOa2(ZFaZ)
+ randperm(4);
+ continue
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
-
+ HFvX = dist(HsUC,1);
+ path = T7jd(B,[LFdA(HFvX); tNlO(ZFaZ)], [gAyR(HFvX); rSII(ZFaZ)], -YxFZ, BCuq, YxFZ);
+ FOa2(ZFaZ)=true;
+ if size(path,1) > 0
+ W = [W; path];
+ B = dx3s(B,path,-YxFZ);
+ P0pr = P0pr + 1;
+ ej96 = true;
+ tNlO([g_Np ZFaZ]) = tNlO([ZFaZ g_Np]);
+ rSII([g_Np ZFaZ]) = rSII([ZFaZ g_Np]);
+ break
end
-
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
+ if ~ej96
+ 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;
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
+ function [W B] = XRUu(B,W,ynil,dI5O)
+ [ulTm d80F] = ciOU(B,dI5O);
+ if d80F < 1, return, end
+ ulTm=sortrows(ulTm,-dI5O);
+ for Hxm_ = 1:d80F
+ YxFZ = ulTm(Hxm_,1);
+ TxhE = sum(B == -YxFZ);
+ if TxhE == 0
+ if ulTm(Hxm_,2) >= 2
+ [tNlO rSII] = find(B == YxFZ);
+ BdmU = size(tNlO,1);
+ yF3s = BdmU*(BdmU-1)*.5;
+ uIQy = (1:BdmU*BdmU)';
+ ZFaZ=mod(uIQy-1,BdmU)+1;
+ HFvX=ceil(uIQy/BdmU);
+ y05c = (HFvX<ZFaZ);
+ HFvX = HFvX(y05c);
+ ZFaZ = ZFaZ(y05c);
+ CADa = abs(tNlO(HFvX)-tNlO(ZFaZ)) + abs(rSII(HFvX)-rSII(ZFaZ));
+ dist = [HFvX,ZFaZ,CADa];
+ [CADa nn1W] = sort(dist(:,3));
+ dist = dist(nn1W,:);
+ maxstep = min(ynil,2*YxFZ+1);
+ ej96 = false;
+ for HsUC = 1:yF3s
+ if dist(HsUC,3) > maxstep+1
+ break
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;
+ HFvX = dist(HsUC,1);
+ ZFaZ = dist(HsUC,2);
+ path = T7jd(B,[tNlO(HFvX); tNlO(ZFaZ)], [rSII(HFvX); rSII(ZFaZ)], -YxFZ, ynil, 2*YxFZ);
+ if size(path,1) > 0
+ W = [W; path];
+ B = dx3s(B,path,-YxFZ);
+ ej96 = true;
+ break
+ end
+ end
+ if ~ej96
+ continue
+ end
+ end
+ end
+ [tNlO rSII] = find(B == YxFZ);
+ Hcc9 = size(tNlO,1);
+ maxstep = min(ynil,YxFZ+1);
+ for g_Np = 1:Hcc9
+ [LFdA gAyR] = find(B == -YxFZ);
+ TxhE = size(LFdA,1);
+ yF3s = TxhE * (Hcc9-g_Np+1);
+ dist = zeros(yF3s,3);
+ HsUC = 0;
+ for HFvX = 1:TxhE
+ for ZFaZ = g_Np:Hcc9
+ HsUC = HsUC + 1;
+ dist(HsUC,1) = HFvX;
+ dist(HsUC,2) = ZFaZ;
+ dist(HsUC,3) = abs(LFdA(HFvX)-tNlO(ZFaZ)) + abs(gAyR(HFvX)-rSII(ZFaZ));
+ end
+ end
+ [CADa nn1W] = sort(dist(:,3));
+ dist = dist(nn1W,:);
+ FOa2 = false(Hcc9,1);
+ ej96 = false;
+ for HsUC = 1:yF3s
+ if dist(HsUC,3) > maxstep+1
+ break
+ end
+ ZFaZ = dist(HsUC,2);
+ if FOa2(ZFaZ)
+ randperm(4);
+ continue
+ end
+ HFvX = dist(HsUC,1);
+ path = T7jd(B,[LFdA(HFvX); tNlO(ZFaZ)], [gAyR(HFvX); rSII(ZFaZ)], -YxFZ, ynil, 2*YxFZ);
+ FOa2(ZFaZ)=true;
+ if size(path,1) > 0
+ W = [W; path];
+ B = dx3s(B,path,-YxFZ);
+ ej96 = true;
+ tNlO([g_Np ZFaZ]) = tNlO([ZFaZ g_Np]);
+ rSII([g_Np ZFaZ]) = rSII([ZFaZ g_Np]);
+ break
+ end
+ end
+ if ~ej96
+ break
+ end
+ end
+ end
+ end
+ function [FKB0 jWgr] = vrxa(uOhj,B,path)
+ [sOPg K_y9] = size(B);
+ FKB0 = uOhj == 0;
+ jWgr = FKB0;
+ FKB0(:,[1 K_y9]) = false;
+ jWgr([1 sOPg],:) = false;
+ for Hxm_ = 1:size(path,1)
+ if path(Hxm_,1) == path(Hxm_,3)
+ FKB0(path(Hxm_,1),path(Hxm_,2)) = false;
+ FKB0(path(Hxm_,3),path(Hxm_,4)) = false;
+ end
+ if path(Hxm_,2) == path(Hxm_,4)
+ jWgr(path(Hxm_,1),path(Hxm_,2)) = false;
+ jWgr(path(Hxm_,3),path(Hxm_,4)) = false;
+ end
+ end
+ end
+ function B = dx3s(B,path,ImDv)
+ B(path(1,1),path(1,2)) = ImDv;
+ for Hxm_ = 1:size(path,1);
+ B(path(Hxm_,3),path(Hxm_,4)) = ImDv;
+ end
+ end
+ function path = n_G3(d6qu,trKZ,sOPg,Lm76)
+ path = zeros(Lm76,4);
+ Msjm = mod(d6qu,sOPg);
+ UiZw = ceil(d6qu/sOPg);
+ for g_Np = 1:Lm76
+ path(g_Np,1:2) = [Msjm UiZw];
+ d6qu = trKZ(d6qu);
+ Msjm = mod(d6qu,sOPg);
+ UiZw = ceil(d6qu/sOPg);
+ path(g_Np,3:4) = [Msjm UiZw];
+ end
+ end
+ function path = T7jd(B,tNlO,rSII,ImDv,BCuq,mZOE)
+ [sOPg K_y9] = size(B);
+ trKZ = zeros(sOPg,K_y9);
+ nltm = -ones(sOPg,K_y9);
+ nltm(tNlO(2),rSII(2)) = 0;
+ nltm(tNlO(1),rSII(1)) = -2;
+ nltm( B == ImDv ) = -2;
+ XAYx = zeros(sOPg*K_y9,1);
+ XAYx(1) = tNlO(2) + (rSII(2)-1)*sOPg;
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
+ cEiB = [-1 1 -sOPg sOPg];
+ uWNu = randperm(4);
+ for step = 0:min(BCuq,mZOE)
+ if count < 1, break, end
+ BdmU = count;
+ d6qu = XAYx;
+ count = 0;
+ for Hxm_ = 1:BdmU
+ TSYc = d6qu(Hxm_);
+ for vnEQ=1:4
+ EWHr = TSYc + cEiB(uWNu(vnEQ));
+ GYKa = nltm(EWHr);
+ if GYKa == -2
+ trKZ(EWHr) = TSYc;
+ path = n_G3(EWHr,trKZ,sOPg,step+1);
+ return
end
+ if GYKa == -1 && B(EWHr) == 0
+ nltm(EWHr) = step+1;
+ trKZ(EWHr) = TSYc;
+ count = count + 1;
+ XAYx(count) = EWHr;
+ 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 = xqn6(B,FKB0,jWgr,tNlO,rSII,ImDv,kdz8,ynil,mZOE)
+ [sOPg K_y9] = size(B);
+ R27s = false(sOPg,K_y9);
+ trKZ = zeros(sOPg,K_y9);
+ nltm = -ones(sOPg,K_y9);
+ nltm(tNlO(1),rSII(1)) = -2;
+ nltm( B == ImDv ) = -2;
+ maxstep = min((kdz8*27)+ynil,mZOE+1);
+ aIsP = zeros(maxstep+28,1);
+ aIsP(1) = tNlO(2) + (rSII(2)-1)*sOPg;
+ cEiB = [-sOPg sOPg -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 aIsP(step)>0
+ TSYc = aIsP(step);
+ aIsP(step)=nltm(TSYc);
+ for vnEQ = 1:4
+ EWHr = TSYc + cEiB(vnEQ);
+ GYKa = nltm(EWHr);
+ if GYKa==-1
+ if B(EWHr) == 0
+ nltm(EWHr) = aIsP(step+1);
+ aIsP(step+1) = EWHr;
+ trKZ(EWHr) = TSYc;
+ elseif (FKB0(EWHr)&&(vnEQ<3)) || (jWgr(EWHr)&&(vnEQ>2))
+ nltm(EWHr) = aIsP(step+26);
+ aIsP(step+26) = EWHr;
+ trKZ(EWHr) = TSYc;
+ R27s(EWHr) = true;
end
+ end
+ if GYKa==-2
+ step=step+1;
+ trKZ(EWHr) = TSYc;
+ Msjm=mod(EWHr,sOPg);
+ UiZw=ceil(EWHr/sOPg);
+ path = zeros(step,4);
+ g_Np = 0;
+ while Msjm ~= tNlO(2) || UiZw ~= rSII(2)
+ g_Np = g_Np + 1;
+ path(g_Np,1:2) = [Msjm UiZw];
+ EWHr = Msjm + (UiZw-1)*sOPg;
+ Fl8h = trKZ(EWHr);
+ YNXD=mod(Fl8h,sOPg);
+ GJ8o=ceil(Fl8h/sOPg);
+ path(g_Np,3:4) = [YNXD GJ8o];
+ Msjm = YNXD;
+ UiZw = GJ8o;
+ if R27s(Msjm,UiZw)
+ g_Np = g_Np + 1;
+ path(g_Np,:) = [Msjm UiZw Msjm UiZw];
+ end
+ end
+ path = path(1:g_Np,:);
+ 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 = WY0q(B)
+ [W,jSuI] = B0gN(B);
+ kXgy = 0;
+ wI9h = round(mod(B(:),2));
+ if jSuI < 2100
+ return
end
- [kJfcOitU9b,ZqDtJmqMeb] = size(B);
+ [cnZ0,AIXx] = 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];
+ [N0XP,KrIA] = B0gN(B);
+ if jSuI > KrIA
+ W = [cnZ0-N0XP(:,2)+1 AIXx-N0XP(:,1)+1 cnZ0-N0XP(:,4)+1 AIXx-N0XP(:,3)+1];
end
- if d2F7TC2nTS~=IN55LEuuYN; W = zeros(0,4); end
+ if wI9h~=kXgy; 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,jSuI] = B0gN(B)
+ [LtPW,fo1h]=size(B);
+ aisL=nan(LtPW+2,fo1h+2);
+ aisL(2:end-1,2:end-1)=B;
+ AnrP = aisL;
+ kdz8 = 4;
+ if size(AnrP,2) > 20
+ tOCB = 4;
+ Pspq = 8;
+ BCuq = 12;
else
- cutfirst = 3;
- cutsecond = 7;
- cutoff = 11;
+ tOCB = 3;
+ Pspq = 7;
+ BCuq = 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
+ jSuI = inf;
+ rwEQ = [1 2;2 1];
+ wzEq = [1 3;3 1];
+ a11Y = [3 2 1;1 2 3];
+ for HsUC = 1:2
+ if HsUC == 2
+ [OzZf VY9l] = fJB3(AnrP,tOCB,rwEQ(HsUC,:));
+ [vSzv hm9_] = ji2Z(VY9l,OzZf,Pspq,wzEq(HsUC,:));
+ [CdAJ RpMJ] = ji2Z(hm9_,vSzv,BCuq,wzEq(HsUC,:));
+ else
+ [OzZf VY9l] = fJB3(AnrP,4,rwEQ(HsUC,:));
+ [CdAJ RpMJ] = ji2Z(VY9l,OzZf,11,wzEq(HsUC,:));
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 Ajr5 = 1:2
+ if HsUC == 2 && Ajr5 == 2 && jSuI > 2100, return, end
+ TB69 = nXRQ(AnrP,RpMJ,CdAJ,kdz8,BCuq,a11Y(Ajr5,:))-1;
+ RZJ5 = tYbV(B,TB69);
+ if RZJ5 <= jSuI
+ jSuI = RZJ5;
+ W = TB69;
+ kdz8 = kdz8 - 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 LtPW*fo1h > 290; return; end
+ b6Kb = sum(W(:,1)==W(:,3)&W(:,2)==W(:,4));
+ if b6Kb <= 4
+ diJX = KE2e(B);
+ O8ss = tYbV(B,diJX);
+ if O8ss < jSuI
+ W = diJX;
+ jSuI = O8ss;
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 = ipeR(B,tNlO,rSII,ImDv,BCuq,mZOE)
+ function path = xFOZ(GaYD,gy61,yCFy)
+ ylDw(GaYD,gy61) = XHib(Hxm_);
+ uPTE(GaYD,gy61) = RQeb(Hxm_);
+ path = zeros(yCFy,4);
+ for S3Ys = 1:yCFy
+ path(S3Ys,1:2) = [GaYD gy61];
+ QbPy = ylDw(GaYD,gy61);
+ uEB0 = uPTE(GaYD,gy61);
+ path(S3Ys,3:4) = [QbPy uEB0];
+ GaYD = QbPy;
+ gy61 = uEB0;
+ end
+ end
+ [sOPg K_y9] = size(B);
+ ylDw = zeros(sOPg,K_y9);
+ uPTE = zeros(sOPg,K_y9);
+ nltm = -ones(sOPg,K_y9);
+ nltm(tNlO(2),rSII(2)) = 0;
+ nltm(tNlO(1),rSII(1)) = -2;
+ nltm( B == ImDv ) = -2;
+ t9qL = zeros(sOPg*K_y9,1);
+ wdX4 = zeros(sOPg*K_y9,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
+ t9qL(1) = tNlO(2);
+ wdX4(1) = rSII(2);
+ g6BC=[-1 1 0 0];
+ nOwT=[0 0 -1 1];
+ for step = 0:min(BCuq,mZOE)
+ if count < 1, break, end
+ BdmU = count;
+ XHib = t9qL(1:BdmU);
+ RQeb = wdX4(1:BdmU);
+ count = 0;
+ for Hxm_ = 1:BdmU
+ jM_J = RQeb(Hxm_);
+ TSYc = XHib(Hxm_);
+ for vnEQ=1:4
+ GaYD = TSYc + g6BC(vnEQ);
+ gy61 = jM_J + nOwT(vnEQ);
+ EWHr = GaYD + (gy61-1)*sOPg;
+ GYKa = nltm(EWHr);
+ if GYKa == -2
+ path = xFOZ(GaYD,gy61,step+1);
+ return
+ elseif GYKa == -1 && B(EWHr) == 0
+ nltm(EWHr) = step+1;
+ ylDw(EWHr) = TSYc;
+ uPTE(EWHr) = jM_J;
+ count = count + 1; t9qL(count) = GaYD; wdX4(count) = gy61;
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 c0VU = KE2e(ZFaZ)
+ YxFZ = unique(ZFaZ);
+ YxFZ(1) = [];
+ a9GQ = zeros(size(YxFZ));
+ for Hxm_ = 1:length(a9GQ)
+ a9GQ(Hxm_) = nnz(YxFZ(Hxm_) == ZFaZ(:));
end
- for i = 1:length(n)
- if n(i) == 1
- b(p(i) == b(:)) = -1;
- end
+ for Hxm_ = 1:length(a9GQ)
+ if a9GQ(Hxm_) == 1
+ ZFaZ(YxFZ(Hxm_) == ZFaZ(:)) = -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
+ OsYX = zeros(size(ZFaZ)+2);
+ Bh_6 = repmat(-1,size(OsYX));
+ Bh_6(2:end-1,2:end-1) = ZFaZ;
+ c0VU = [];
+ [sgxZ, hKdp] = find(Bh_6>0);
+ CADa = (size(Bh_6,1)/2 - sgxZ).^2 + (size(Bh_6,2)/2 - hKdp).^2;
+ [CADa, order] = sort(CADa);
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 d80F = 1:length(sgxZ)-1
+ tJIU = 0;
+ geyv = 32;
+ for Hxm_ = order
+ if OsYX(sgxZ(Hxm_), hKdp(Hxm_))
+ continue
end
- w = w - 1;
+ [X3nO, Dr_G, Hix4] = pQQS(Bh_6, OsYX, sgxZ(Hxm_), hKdp(Hxm_), geyv);
+ if X3nO > tJIU
+ tJIU = X3nO;
+ eTG0 = Dr_G;
+ geyv = Hix4;
+ if geyv == 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 tJIU == 0
+ c0VU = c0VU - 1;
+ return
end
- bestscore = b(z,zC) - minsteps;
- if minsteps == 1
- bestmove = [z, zC, Cw4BfzRNQ6, qpF1lfOV53];
- return
+ OsYX = dx3s(OsYX, eTG0, Bh_6(eTG0(1,1), eTG0(1,2)));
+ Bh_6 = dx3s(Bh_6, eTG0, Bh_6(eTG0(1,1), eTG0(1,2)));
+ c0VU = [c0VU; eTG0];
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;
+ c0VU = c0VU - 1;
end
+ function [tJIU, eTG0, geyv] = pQQS(ZFaZ, OsYX, d6qu, RQeb, cj1H)
+ tJIU = 0;
+ eTG0 = [];
+ S3Ys = [1 -1 0 0];
+ d80F = [0 0 1 -1];
+ if ~any(OsYX(:)==ZFaZ(d6qu,RQeb))
+ OsYX = ZFaZ;
end
-
-
- function [W B] = phase1_a(B,cutoff,rz)
+ Bh_6 = ZFaZ;
+ Bh_6(Bh_6>0) = -1;
+ Bh_6(d6qu,RQeb) = 1;
+ geyv = Inf;
+ YxFZ = ZFaZ(d6qu,RQeb);
+ for Hxm_ = 1:cj1H-2
+ [sgxZ, hKdp] = find(Bh_6==Hxm_);
+ for a9GQ = 1:length(sgxZ)
+ for Zc5z = 1:4
+ sPmq = sgxZ(a9GQ) + S3Ys(Zc5z);
+ yv0Z = hKdp(a9GQ) + d80F(Zc5z);
+ if OsYX(sPmq,yv0Z) == YxFZ && ~(sPmq == d6qu && yv0Z == RQeb)
+ geyv = Hxm_;
+ break
+ end
+ JYeV = Bh_6(sPmq,yv0Z);
+ if JYeV == 0
+ Bh_6(sPmq,yv0Z) = Hxm_+1;
+ end
+ end
+ if geyv < Inf
+ break
+ end
+ end
+ if geyv < Inf
+ break
+ end
+ end
+ if geyv == Inf
+ return
+ end
+ tJIU = ZFaZ(d6qu,RQeb) - geyv;
+ if geyv == 1
+ eTG0 = [d6qu, RQeb, sPmq, yv0Z];
+ return
+ end
+ eTG0 = zeros(geyv,4);
+ for step = geyv:-1:1
+ for Zc5z = 1:4
+ DwaA = sPmq + S3Ys(Zc5z);
+ Ppld = yv0Z + d80F(Zc5z);
+ if Bh_6(DwaA, Ppld) == step
+ break
+ end
+ end
+ eTG0(step,:) = [DwaA, Ppld, sPmq, yv0Z];
+ sPmq = DwaA;
+ yv0Z = Ppld;
+ end
+ end
+ function [W B] = fJB3(B,BCuq,dI5O)
W = [];
- [pincount k] = analyzeboard(B,rz);
- if k < 1
- return
+ [ulTm d80F] = ciOU(B,dI5O);
+ if d80F < 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
+ ulTm=sortrows(ulTm,-dI5O);
+ for Hxm_ = 1:d80F
+ if ulTm(Hxm_,2) >= 2
+ YxFZ = ulTm(Hxm_,1);
+ [tNlO rSII] = find(B == YxFZ);
+ BdmU = size(tNlO,1);
+ yF3s = BdmU*(BdmU-1)/2;
+ dist = zeros(yF3s,3);
+ HsUC = 0;
+ for HFvX = 1:BdmU
+ for ZFaZ = (HFvX+1):BdmU
+ HsUC = HsUC + 1;
+ dist(HsUC,1) = HFvX;
+ dist(HsUC,2) = ZFaZ;
+ dist(HsUC,3) = abs(tNlO(HFvX)-tNlO(ZFaZ)) + abs(rSII(HFvX)-rSII(ZFaZ));
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
+ [CADa nn1W] = sort(dist(:,3));
+ dist = dist(nn1W,:);
+ VRtP = reshape(dist(:,1:2)',[],1);
+ P0pr = 0;
+ KuoP = 1;
+ gBQl = false(BdmU,1);
+ for Hxm_=1:BdmU
+ NDxB = find( ~gBQl(VRtP(KuoP:end)) , 1 , 'first');
+ if isempty(NDxB)
+ break
end
+ HFvX = VRtP(NDxB);
+ Distance = abs(tNlO([1:HFvX-1,HFvX+1:end]')-tNlO(HFvX)) + abs(rSII([1:HFvX-1,HFvX+1:end]')-rSII(HFvX));
+ if max(Distance)>BCuq-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 = H6_U(B,tNlO(HFvX),rSII(HFvX),tNlO([1:HFvX-1,HFvX+1:end]'),rSII([1:HFvX-1,HFvX+1:end]'), -YxFZ, BCuq, 2*YxFZ);
+ if size(path,1) > 0
+ W = [W; path];
+ B = dx3s(B,path,-YxFZ);
+ P0pr = 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 P0pr < 2
+ continue
end
+ for S3Ys = 3:BdmU
+ [LFdA gAyR] = find(B == -YxFZ);
+ [tNlO rSII] = find(B == YxFZ);
+ [PAXo,Dmtt] = meshgrid(tNlO,LFdA);
+ [Wxwq,F4Sk] = meshgrid(tNlO,LFdA);
+ Distance = abs(PAXo-Dmtt) + abs(Wxwq-F4Sk);
+ if max(Distance(:))>BCuq-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 = H6_U(B,LFdA,gAyR,tNlO,rSII, -YxFZ, BCuq, 2*YxFZ);
+ if size(path,1) > 0
+ W = [W; path];
+ B = dx3s(B,path,-YxFZ);
+ ej96 = true;
+ else
+ break
+ end
+ end
+ end
+ end
+ end
+ function [W B] = ji2Z(B,W,iHWj,dI5O)
+ [ulTm d80F] = ciOU(B,dI5O);
+ if d80F < 1, return, end
+ ulTm=sortrows(ulTm,-dI5O);
+ for Hxm_ = 1:d80F
+ YxFZ = ulTm(Hxm_,1);
+ TxhE = sum(B == -YxFZ);
+ if TxhE == 0
+ if ulTm(Hxm_,2) >= 2
+ [tNlO rSII] = find(B == YxFZ);
+ BdmU = size(tNlO,1);
+ yF3s = BdmU*(BdmU-1)/2;
+ dist = zeros(yF3s,3);
+ HsUC = 0;
+ for HFvX = 1:BdmU
+ for ZFaZ = (HFvX+1):BdmU
+ HsUC = HsUC + 1;
+ dist(HsUC,1) = HFvX;
+ dist(HsUC,2) = ZFaZ;
+ dist(HsUC,3) = abs(tNlO(HFvX)-tNlO(ZFaZ)) + abs(rSII(HFvX)-rSII(ZFaZ));
+ end
+ end
+ [CADa nn1W] = sort(dist(:,3));
+ dist = dist(nn1W,:);
+ maxstep = min(iHWj,2*YxFZ+1);
+ ej96 = false;
+ for HsUC = 1:yF3s
+ if dist(HsUC,3) > maxstep+1
+ break
+ end
+ HFvX = dist(HsUC,1);
+ ZFaZ = dist(HsUC,2);
+ path = ipeR(B,[tNlO(HFvX); tNlO(ZFaZ)], [rSII(HFvX); rSII(ZFaZ)], -YxFZ, iHWj, 2*YxFZ);
+ if size(path,1) > 0
+ W = [W; path];
+ B = dx3s(B,path,-YxFZ);
+ ej96 = true;
+ break
+ end
+ end
+ if ~ej96
+ continue
+ end
+ end
+ end
+ [tNlO rSII] = find(B == YxFZ);
+ WfB5 = size(tNlO,1);
+ maxstep = min(iHWj,YxFZ+1);
+ for S3Ys = 1:WfB5
+ [LFdA gAyR] = find(B == -YxFZ);
+ [tNlO rSII] = find(B == YxFZ);
+ ej96 = false;
+ path = H6_U(B,LFdA,gAyR,tNlO,rSII, -YxFZ, iHWj, YxFZ);
+ if size(path,1) > 0
+ W = [W; path];
+ B = dx3s(B,path,-YxFZ);
+ ej96 = true;
+ end
+ if ~ej96
+ break
+ end
+ end
+ end
+ end
+ function [W B] = nXRQ(aisL,B,W,kdz8,iHWj,dI5O)
+ function HP_D()
+ for c0VU = 1:size(path,1);
+ if path(c0VU,1) == path(c0VU,3)
+ Ml8x(path(c0VU,1),path(c0VU,2)) = false;
+ Ml8x(path(c0VU,3),path(c0VU,4)) = false;
+ if path(c0VU,2) == path(c0VU,4)
+ B(path(c0VU,1),path(c0VU,2)) = -9999;
+ end
+ end
+ if path(c0VU,2) == path(c0VU,4)
+ dH3T(path(c0VU,1),path(c0VU,2)) = false;
+ dH3T(path(c0VU,3),path(c0VU,4)) = false;
+ end
+ end
+ end
+ [Ml8x dH3T] = vrxa(aisL,B,W);
+ [ulTm d80F] = ciOU(B,dI5O);
+ if d80F < 1, return, end
+ ulTm=sortrows(ulTm,-dI5O);
+ for Hxm_ = 1:d80F
+ YxFZ = ulTm(Hxm_,1);
+ TxhE = sum(B == -YxFZ);
+ if TxhE == 0
+ if ulTm(Hxm_,2) >= 2
+ [tNlO rSII] = find(B == YxFZ);
+ BdmU = size(tNlO,1);
+ yF3s = BdmU*(BdmU-1)/2;
+ dist = zeros(yF3s,3);
+ HsUC = 0;
+ for HFvX = 1:BdmU
+ for ZFaZ = (HFvX+1):BdmU
+ HsUC = HsUC + 1;
+ dist(HsUC,1) = HFvX;
+ dist(HsUC,2) = ZFaZ;
+ dist(HsUC,3) = abs(tNlO(HFvX)-tNlO(ZFaZ)) + abs(rSII(HFvX)-rSII(ZFaZ));
+ end
+ end
+ [CADa nn1W] = sort(dist(:,3));
+ dist = dist(nn1W,:);
+ maxstep = min((kdz8*25)+iHWj,2*YxFZ+1);
+ ej96 = false;
+ for HsUC = 1:yF3s
+ if dist(HsUC,3) > maxstep+1
+ break
+ end
+ HFvX = dist(HsUC,1);
+ ZFaZ = dist(HsUC,2);
+ path = xqn6(B,Ml8x,dH3T,[tNlO(HFvX); tNlO(ZFaZ)], [rSII(HFvX); rSII(ZFaZ)], -YxFZ, kdz8, iHWj, 2*YxFZ);
+ if size(path,1) > 0
+ W = [W; path];
+ B = dx3s(B,path,-YxFZ);
+ HP_D();
+ ej96 = true;
+ break
+ end
+ end
+ if ~ej96
+ continue
+ end
+ end
+ end
+ [tNlO rSII] = find(B == YxFZ);
+ WfB5 = size(tNlO,1);
+ maxstep = min((kdz8*25)+iHWj,YxFZ+1);
+ for S3Ys = 1:WfB5
+ [LFdA gAyR] = find(B == -YxFZ);
+ [tNlO rSII] = find(B == YxFZ);
+ ej96 = false;
+ path = wDI6(B,Ml8x,dH3T,LFdA,gAyR,tNlO,rSII, -YxFZ, kdz8, iHWj, YxFZ);
+ if size(path,1) > 0
+ W = [W; path];
+ B = dx3s(B,path,-YxFZ);
+ HP_D();
+ ej96 = true;
+ end
+ if ~ej96
+ break
+ end
+ end
+ end
+ end
+ function path = wDI6(B,FKB0,jWgr,rowS,colS,DeQN,lq5q,ImDv,kdz8,ynil,mZOE)
+ function path = n_G3(EWHr,step)
+ trKZ(EWHr) = TSYc;
+ path = zeros(step,4);
+ g_Np = 0;
+ OyHd = 0;
+ Ozz8 = zeros(step,1);
+ ms8s = zeros(step,1);
+ mSvG = zeros(step,1);
+ while isempty(find(oNTt==EWHr,1))
+ g_Np = g_Np + 1;
+ Ozz8(g_Np,1) = EWHr;
+ Fl8h = trKZ(EWHr);
+ ms8s(g_Np,1) = Fl8h;
+ EWHr = Fl8h;
+ if R27s(EWHr)
+ OyHd = OyHd + 1;
+ mSvG(OyHd,1) = EWHr;
+ end
+ end
+ Ozz8 = [ Ozz8(1:g_Np,:) ; mSvG(1:OyHd,1) ];
+ ms8s = [ ms8s(1:g_Np,:) ; mSvG(1:OyHd,1) ];
+ path = [ mod(Ozz8,sOPg) , ceil(Ozz8/sOPg) , mod(ms8s,sOPg) , ceil(ms8s/sOPg) ];
+ end
+ [sOPg K_y9] = size(B);
+ R27s = false(sOPg,K_y9);
+ trKZ = zeros(sOPg,K_y9);
+ nltm = -ones(sOPg,K_y9);
+ oNTt = rowS + (colS-1)*sOPg;
+ nltm(oNTt) = 0;
+ nltm(DeQN + (lq5q-1)*sOPg) = -2;
+ maxstep = min((kdz8*25)+ynil,mZOE+1);
+ vMuZ = zeros(maxstep+26,1);
+ vnXS = [-1 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
+ d6qu = oNTt;
+ elseif vMuZ(step) == 0
+ continue
+ else
+ d6qu = find(nltm == step);
end
+ BdmU = numel(d6qu);
+ for Hxm_ = 1:BdmU
+ TSYc = d6qu(Hxm_);
+ for ANNk = 1:2
+ EWHr = TSYc + vnXS(ANNk) * sOPg;
+ GYKa = nltm(EWHr);
+ if GYKa == -2
+ path = n_G3(EWHr,step+1);
+ return
+ elseif GYKa == -1
+ if B(EWHr) == 0
+ nltm(EWHr) = step+1; vMuZ(step+1) = 1;
+ trKZ(EWHr) = TSYc;
+ elseif FKB0(EWHr)
+ nltm(EWHr) = step+26; vMuZ(step+26) = 1;
+ trKZ(EWHr) = TSYc;
+ R27s(EWHr) = true;
+ end
+ end
+ end
+ for ANNk = 1:2
+ EWHr = TSYc + vnXS(ANNk);
+ GYKa = nltm(EWHr);
+ if GYKa == -2
+ path = n_G3(EWHr,step+1);
+ return
+ elseif GYKa == -1
+ if B(EWHr) == 0
+ nltm(EWHr) = step+1; vMuZ(step+1) = 1;
+ trKZ(EWHr) = TSYc;
+ elseif jWgr(EWHr)
+ nltm(EWHr) = step+26; vMuZ(step+26) = 1;
+ trKZ(EWHr) = TSYc;
+ R27s(EWHr) = true;
+ end
+ 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 = H6_U(B,rowS,colS,SHMW,el9f,ImDv,BCuq,mZOE)
+ [sOPg K_y9] = size(B);
+ ylDw = zeros(sOPg,K_y9);
+ uPTE = zeros(sOPg,K_y9);
+ nltm = -ones(sOPg,K_y9);
+ nltm(rowS+(colS-1)*sOPg) = 0;
+ nltm(SHMW+(el9f-1)*sOPg) = -2;
+ XAYx = zeros(sOPg*K_y9,1);
+ wdX4 = zeros(sOPg*K_y9,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
+ XAYx(1:count) = rowS;
+ wdX4(1:count) = colS;
+ g6BC=[-1 1 0 0];
+ nOwT=[0 0 -1 1];
+ for step = 0:min(BCuq,mZOE)
+ if count < 1, break, end
+ BdmU = count;
+ XHib = XAYx(1:BdmU);
+ RQeb = wdX4(1:BdmU);
+ count = 0;
+ for Hxm_ = 1:BdmU
+ jM_J = RQeb(Hxm_);
+ TSYc = XHib(Hxm_);
+ for vnEQ=1:4
+ GaYD = TSYc + g6BC(vnEQ);
+ gy61 = jM_J + nOwT(vnEQ);
+ EWHr = GaYD + (gy61-1)*sOPg;
+ GYKa = nltm(EWHr);
+ if GYKa == -2
+ yCFy=step+1;
+ ylDw(GaYD,gy61) = XHib(Hxm_);
+ uPTE(GaYD,gy61) = RQeb(Hxm_);
+ path = zeros(yCFy,4);
+ for S3Ys = 1:yCFy
+ path(S3Ys,1:2) = [GaYD gy61];
+ QbPy = ylDw(GaYD,gy61);
+ uEB0 = uPTE(GaYD,gy61);
+ path(S3Ys,3:4) = [QbPy uEB0];
+ GaYD = QbPy;
+ gy61 = uEB0;
end
+ return
+ end
+ if GYKa == -1 && B(EWHr) == 0
+ nltm(EWHr) = step+1;
+ ylDw(EWHr) = TSYc;
+ uPTE(EWHr) = jM_J;
+ count = count + 1; XAYx(count) = GaYD; wdX4(count) = gy61;
+ end
+ end
+ end
+ end
path = [];
- end+ end
|