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;
+ dMLY=3877;
+ l6GI = rand(43,1);
+ W=RW2t(B);
+ Fx8_ = KAIg(B,W);
+ [Jczo,PkRx] = size(B);
+ hi6U = B(Jczo:-1:1,:);
+ hi6U = hi6U.';
+ [CvZB,GLyg] = FZup(hi6U,[1 2],[1 2],4*Jczo*PkRx);
+ if Fx8_ > GLyg
+ W = [Jczo-CvZB(:,2)+1 CvZB(:,1) Jczo-CvZB(:,4)+1 CvZB(:,3)];
+ Fx8_=GLyg;
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;
+ a16m=rand('state');
+ rand(dMLY,1);
+ if Fx8_>1000 && rand<.5
+ [CvZB,GLyg] = FZup(hi6U,[1 2],[1 2],4*Jczo*PkRx);
+ if Fx8_ > GLyg
+ W = [Jczo-CvZB(:,2)+1 CvZB(:,1) Jczo-CvZB(:,4)+1 CvZB(:,3)];
+ Fx8_=GLyg;
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 Fx8_>1000 && rand<.5
+ [CvZB,GLyg] = FZup(hi6U,[1 2],[1 2],4*Jczo*PkRx);
+ if Fx8_ > GLyg
+ W = [Jczo-CvZB(:,2)+1 CvZB(:,1) Jczo-CvZB(:,4)+1 CvZB(:,3)];
+ Fx8_=GLyg;
+ end
+ end
+ rand('state',a16m);
+ end
+ function [W,Fx8_] = FZup(CxkM,aNXV,idJ6,Y9FN)
+ [jxrF,CK3x]=size(CxkM);
+ a3f_= -ones(jxrF+2,CK3x+2);
+ a3f_(2:end-1,2:end-1)=CxkM;
+ wbkl = a3f_;
+ Ya8F = 4;
+ if size(wbkl,2) > 20
+ fJkO = 4;
+ rtf5 = 8;
+ ATWm = 18;
else
- cutfirst = 3;
- cutsecond = 7;
- cutoff = 13;
+ fJkO = 3;
+ rtf5 = 7;
+ ATWm = 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
+ Fx8_ = inf;
+ WABR = [1 2;2 1];
+ pvu3 = [1 3;3 1];
+ A2oU = [3 2 1;1 2 3];
+ for PrLj = aNXV
+ if PrLj == 2
+ [U1_6 lzpH] = U7_e(wbkl,fJkO,WABR(PrLj,:));
+ [BceY pPZr] = aYpv(lzpH,U1_6,rtf5,pvu3(PrLj,:));
+ [mR4E M7eC] = aYpv(pPZr,BceY,ATWm,pvu3(PrLj,:));
+ else
+ [U1_6 lzpH] = U7_e(wbkl,4,WABR(PrLj,:));
+ [mR4E M7eC] = aYpv(lzpH,U1_6,11,pvu3(PrLj,:));
end
+ for HwSv = idJ6
+ n3Es = si0k(wbkl,M7eC,mR4E,Ya8F,ATWm,A2oU(HwSv,:))-1;
+ Pe9I = KAIg(CxkM,n3Es);
+ if Pe9I <= Fx8_
+ Fx8_ = Pe9I;
+ W = n3Es;
+ Ya8F = Ya8F - 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 WpVp = KAIg(B,W)
+ jxrF=size(B,1);
+ B(W(:,1)+(W(:,2)-1)*jxrF)=0;
+ B(W(:,3)+(W(:,4)-1)*jxrF)=0;
+ WpVp=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 [mgVc jFUm] = srCC(B,u5tr)
+ uPDQ = sort(B(B>0),'descend');
+ VfeB = size(uPDQ,1);
+ if VfeB < 1
+ mgVc = [];
+ jFUm = 0;
+ return
+ end
+ RelO=uPDQ(diff([0;uPDQ])~=0);
+ mgVc = zeros(nnz(RelO),3);
+ QTnE=histc(uPDQ,RelO(end:-1:1));
+ mgVc(:,1)=RelO;
+ mgVc(:,2)=QTnE(end:-1:1);
+ jFUm=nnz(RelO);
+ if u5tr < 3, return, end
+ for xOHJ = 1:jFUm
+ if mgVc(xOHJ,2) >= 2
+ XyoA = mgVc(xOHJ,1);
+ [ecGD HpQh] = find(B == XyoA);
+ Usv0 = 0;
+ gmtQ = size(ecGD,1);
+ Usv0=sum(abs(diff(ecGD))+abs(diff(HpQh)));
+ mgVc(xOHJ,3) = mgVc(xOHJ,2)*XyoA - 0.85 * Usv0;
+ end
+ end
+ end
+ function [W B] = U7_e(B,ATWm,u5tr)
W = [];
-
- [pincount k] = analyzeboard(B,rz);
-
- if k < 1
- return
+ [mgVc jFUm] = srCC(B,u5tr);
+ if jFUm < 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
+ mgVc=sortrows(mgVc,-u5tr);
+ for xOHJ = 1:jFUm
+ if mgVc(xOHJ,2) >= 2
+ XyoA = mgVc(xOHJ,1);
+ [ecGD HpQh] = find(B == XyoA);
+ gmtQ = size(ecGD,1);
+ uvvt = gmtQ*(gmtQ-1)/2;
+ dist = zeros(uvvt,3);
+ [SG22 JhKe]=find(tril(ones(gmtQ),-1));
+ dist(:,1)=JhKe;
+ dist(:,2)=SG22;
+ dist(:,3)=abs(HpQh(SG22)-HpQh(JhKe))+abs(ecGD(SG22)-ecGD(JhKe));
+ [Usv0 zDzc] = sort(dist(:,3));
+ dist = dist(zDzc,:);
+ VfeB = 0;
+ for PrLj = 1:uvvt
+ if dist(PrLj,3) > ATWm+1
+ break
end
+ aCau = dist(PrLj,1);
+ FBrt = dist(PrLj,2);
+ path = dHg8(B,[ecGD(aCau); ecGD(FBrt)], [HpQh(aCau); HpQh(FBrt)], -XyoA, ATWm, 2*XyoA);
+ if size(path,1) > 0
+ W = [W; path];
+ B = eX3Y(B,path,-XyoA);
+ VfeB = 2;
+ edit = [1:(aCau-1) (aCau+1):(FBrt-1) (FBrt+1):gmtQ];
+ ecGD = [ecGD(aCau); ecGD(FBrt); ecGD(edit)];
+ HpQh = [HpQh(aCau); HpQh(FBrt); HpQh(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 VfeB < 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 kkTm = 3:gmtQ
+ [Sd89 HZPi] = find(B == -XyoA);
+ RPq7 = size(Sd89,1);
+ uvvt = RPq7 * (gmtQ - VfeB);
+ xMFI = (1:RPq7*gmtQ)';
+ FBrt=mod(xMFI-1,gmtQ)+1;
+ aCau=ceil(xMFI/gmtQ);
+ Wqhh = (FBrt>VfeB);
+ aCau = aCau(Wqhh);
+ FBrt = FBrt(Wqhh);
+ Usv0 = abs(Sd89(aCau)-ecGD(FBrt)) + abs(HZPi(aCau)-HpQh(FBrt));
+ dist = [aCau,FBrt,Usv0];
+ [Usv0 zDzc] = sort(dist(:,3));
+ dist = dist(zDzc,:);
+ PfvQ = false(gmtQ,1);
+ XMdP = false;
+ for PrLj = 1:uvvt
+ if dist(PrLj,3) > ATWm+1
+ break
end
-
+ FBrt = dist(PrLj,2);
+ if PfvQ(FBrt)
+ 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
-
+ aCau = dist(PrLj,1);
+ path = dHg8(B,[Sd89(aCau); ecGD(FBrt)], [HZPi(aCau); HpQh(FBrt)], -XyoA, ATWm, XyoA);
+ PfvQ(FBrt)=true;
+ if size(path,1) > 0
+ W = [W; path];
+ B = eX3Y(B,path,-XyoA);
+ VfeB = VfeB + 1;
+ XMdP = true;
+ ecGD([kkTm FBrt]) = ecGD([FBrt kkTm]);
+ HpQh([kkTm FBrt]) = HpQh([FBrt kkTm]);
+ 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 ~XMdP
+ 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] = aYpv(B,W,qqwx,u5tr)
+ [mgVc jFUm] = srCC(B,u5tr);
+ if jFUm < 1, return, end
+ mgVc=sortrows(mgVc,-u5tr);
+ for xOHJ = 1:jFUm
+ XyoA = mgVc(xOHJ,1);
+ RPq7 = sum(B == -XyoA);
+ if RPq7 == 0
+ if mgVc(xOHJ,2) >= 2
+ [ecGD HpQh] = find(B == XyoA);
+ gmtQ = size(ecGD,1);
+ uvvt = gmtQ*(gmtQ-1)*.5;
+ xMFI = (1:gmtQ*gmtQ)';
+ FBrt=mod(xMFI-1,gmtQ)+1;
+ aCau=ceil(xMFI/gmtQ);
+ Wqhh = (aCau<FBrt);
+ aCau = aCau(Wqhh);
+ FBrt = FBrt(Wqhh);
+ Usv0 = abs(ecGD(aCau)-ecGD(FBrt)) + abs(HpQh(aCau)-HpQh(FBrt));
+ dist = [aCau,FBrt,Usv0];
+ [Usv0 zDzc] = sort(dist(:,3));
+ dist = dist(zDzc,:);
+ maxstep = min(qqwx,2*XyoA+1);
+ XMdP = false;
+ for PrLj = 1:uvvt
+ if dist(PrLj,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;
+ aCau = dist(PrLj,1);
+ FBrt = dist(PrLj,2);
+ path = dHg8(B,[ecGD(aCau); ecGD(FBrt)], [HpQh(aCau); HpQh(FBrt)], -XyoA, qqwx, 2*XyoA);
+ if size(path,1) > 0
+ W = [W; path];
+ B = eX3Y(B,path,-XyoA);
+ XMdP = true;
+ break
+ end
+ end
+ if ~XMdP
+ continue
+ end
+ end
+ end
+ [ecGD HpQh] = find(B == XyoA);
+ LKFr = size(ecGD,1);
+ maxstep = min(qqwx,XyoA+1);
+ for kkTm = 1:LKFr
+ [Sd89 HZPi] = find(B == -XyoA);
+ RPq7 = size(Sd89,1);
+ uvvt = RPq7 * (LKFr-kkTm+1);
+ dist = zeros(uvvt,3);
+ PrLj = 0;
+ for aCau = 1:RPq7
+ for FBrt = kkTm:LKFr
+ PrLj = PrLj + 1;
+ dist(PrLj,1) = aCau;
+ dist(PrLj,2) = FBrt;
+ dist(PrLj,3) = abs(Sd89(aCau)-ecGD(FBrt)) + abs(HZPi(aCau)-HpQh(FBrt));
+ end
+ end
+ [Usv0 zDzc] = sort(dist(:,3));
+ dist = dist(zDzc,:);
+ PfvQ = false(LKFr,1);
+ XMdP = false;
+ for PrLj = 1:uvvt
+ if dist(PrLj,3) > maxstep+1
+ break
+ end
+ FBrt = dist(PrLj,2);
+ if PfvQ(FBrt)
+ randperm(4);
+ continue
+ end
+ aCau = dist(PrLj,1);
+ path = dHg8(B,[Sd89(aCau); ecGD(FBrt)], [HZPi(aCau); HpQh(FBrt)], -XyoA, qqwx, 2*XyoA);
+ PfvQ(FBrt)=true;
+ if size(path,1) > 0
+ W = [W; path];
+ B = eX3Y(B,path,-XyoA);
+ XMdP = true;
+ ecGD([kkTm FBrt]) = ecGD([FBrt kkTm]);
+ HpQh([kkTm FBrt]) = HpQh([FBrt kkTm]);
+ break
+ end
+ end
+ if ~XMdP
+ break
+ end
+ end
+ end
+ end
+ function [ZaS2 Y7wF] = l8f0(a3f_,B,path)
+ [Vjlw Bbve] = size(B);
+ ZaS2 = a3f_ == 0;
+ Y7wF = ZaS2;
+ ZaS2(:,[1 Bbve]) = false;
+ Y7wF([1 Vjlw],:) = false;
+ for xOHJ = 1:size(path,1)
+ if path(xOHJ,1) == path(xOHJ,3)
+ ZaS2(path(xOHJ,1),path(xOHJ,2)) = false;
+ ZaS2(path(xOHJ,3),path(xOHJ,4)) = false;
+ end
+ if path(xOHJ,2) == path(xOHJ,4)
+ Y7wF(path(xOHJ,1),path(xOHJ,2)) = false;
+ Y7wF(path(xOHJ,3),path(xOHJ,4)) = false;
+ end
+ end
+ end
+ function B = eX3Y(B,path,u4in)
+ B(path(1,1),path(1,2)) = u4in;
+ for xOHJ = 1:size(path,1);
+ B(path(xOHJ,3),path(xOHJ,4)) = u4in;
+ end
+ end
+ function path = i2kt(f3Q0,AcrO,Vjlw,l5Dr)
+ path = zeros(l5Dr,4);
+ BREh = mod(f3Q0,Vjlw);
+ zOop = ceil(f3Q0/Vjlw);
+ for kkTm = 1:l5Dr
+ path(kkTm,1:2) = [BREh zOop];
+ f3Q0 = AcrO(f3Q0);
+ BREh = mod(f3Q0,Vjlw);
+ zOop = ceil(f3Q0/Vjlw);
+ path(kkTm,3:4) = [BREh zOop];
+ end
+ end
+ function path = dHg8(B,ecGD,HpQh,u4in,ATWm,tApj)
+ [Vjlw Bbve] = size(B);
+ AcrO = zeros(Vjlw,Bbve);
+ H4Ha = -ones(Vjlw,Bbve);
+ H4Ha(ecGD(2),HpQh(2)) = 0;
+ H4Ha(ecGD(1),HpQh(1)) = -2;
+ H4Ha( B == u4in ) = -2;
+ LSKV = zeros(Vjlw*Bbve,1);
+ LSKV(1) = ecGD(2) + (HpQh(2)-1)*Vjlw;
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
+ TI0T = [-1 1 -Vjlw Vjlw];
+ FghW = randperm(4);
+ for step = 0:min(ATWm,tApj)
+ if count < 1, break, end
+ gmtQ = count;
+ f3Q0 = LSKV;
+ count = 0;
+ for xOHJ = 1:gmtQ
+ dy1_ = f3Q0(xOHJ);
+ for XhQd=1:4
+ XXLE = dy1_ + TI0T(FghW(XhQd));
+ RHtg = H4Ha(XXLE);
+ if RHtg == -2
+ AcrO(XXLE) = dy1_;
+ path = i2kt(XXLE,AcrO,Vjlw,step+1);
+ return
end
+ if RHtg == -1 && B(XXLE) == 0
+ H4Ha(XXLE) = step+1;
+ AcrO(XXLE) = dy1_;
+ count = count + 1;
+ LSKV(count) = XXLE;
+ 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 = t2Vc(B,ZaS2,Y7wF,ecGD,HpQh,u4in,Ya8F,qqwx,tApj)
+ [Vjlw Bbve] = size(B);
+ CMNQ = false(Vjlw,Bbve);
+ AcrO = zeros(Vjlw,Bbve);
+ H4Ha = -ones(Vjlw,Bbve);
+ H4Ha(ecGD(1),HpQh(1)) = -2;
+ H4Ha( B == u4in ) = -2;
+ maxstep = min((Ya8F*27)+qqwx,tApj+1);
+ Pw7m = zeros(maxstep+28,1);
+ Pw7m(1) = ecGD(2) + (HpQh(2)-1)*Vjlw;
+ TI0T = [-Vjlw Vjlw -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 Pw7m(step)>0
+ dy1_ = Pw7m(step);
+ Pw7m(step)=H4Ha(dy1_);
+ for XhQd = 1:4
+ XXLE = dy1_ + TI0T(XhQd);
+ RHtg = H4Ha(XXLE);
+ if RHtg==-1
+ if B(XXLE) == 0
+ H4Ha(XXLE) = Pw7m(step+1);
+ Pw7m(step+1) = XXLE;
+ AcrO(XXLE) = dy1_;
+ elseif (ZaS2(XXLE)&&(XhQd<3)) || (Y7wF(XXLE)&&(XhQd>2))
+ H4Ha(XXLE) = Pw7m(step+26);
+ Pw7m(step+26) = XXLE;
+ AcrO(XXLE) = dy1_;
+ CMNQ(XXLE) = true;
end
+ end
+ if RHtg==-2
+ step=step+1;
+ AcrO(XXLE) = dy1_;
+ BREh=mod(XXLE,Vjlw);
+ zOop=ceil(XXLE/Vjlw);
+ path = zeros(step,4);
+ kkTm = 0;
+ while BREh ~= ecGD(2) || zOop ~= HpQh(2)
+ kkTm = kkTm + 1;
+ path(kkTm,1:2) = [BREh zOop];
+ XXLE = BREh + (zOop-1)*Vjlw;
+ YA3Q = AcrO(XXLE);
+ W__3=mod(YA3Q,Vjlw);
+ TQrM=ceil(YA3Q/Vjlw);
+ path(kkTm,3:4) = [W__3 TQrM];
+ BREh = W__3;
+ zOop = TQrM;
+ if CMNQ(BREh,zOop)
+ kkTm = kkTm + 1;
+ path(kkTm,:) = [BREh zOop BREh zOop];
+ end
+ end
+ path = path(1:kkTm,:);
+ 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 = RW2t(B)
+ [W,Fx8_] = lhHh(B);
+ pYOP = 0;
+ xAUt = round(mod(B(:),2));
+ if Fx8_ < 2100
+ return
end
- [kJfcOitU9b,ZqDtJmqMeb] = size(B);
+ [QPXZ,v8Il] = 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];
+ [giWv,DkAF] = lhHh(B);
+ if Fx8_ > DkAF
+ W = [QPXZ-giWv(:,2)+1 v8Il-giWv(:,1)+1 QPXZ-giWv(:,4)+1 v8Il-giWv(:,3)+1];
end
- if d2F7TC2nTS~=IN55LEuuYN; W = zeros(0,4); end
+ if xAUt~=pYOP; 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,Fx8_] = lhHh(B)
+ [jxrF,CK3x]=size(B);
+ QPcb=nan(jxrF+2,CK3x+2);
+ QPcb(2:end-1,2:end-1)=B;
+ wbkl = QPcb;
+ Ya8F = 4;
+ if size(wbkl,2) > 20
+ fJkO = 4;
+ rtf5 = 8;
+ ATWm = 12;
else
- cutfirst = 3;
- cutsecond = 7;
- cutoff = 11;
+ fJkO = 3;
+ rtf5 = 7;
+ ATWm = 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
+ Fx8_ = inf;
+ WABR = [1 2;2 1];
+ pvu3 = [1 3;3 1];
+ A2oU = [3 2 1;1 2 3];
+ for PrLj = 1:2
+ if PrLj == 2
+ [U1_6 lzpH] = La8O(wbkl,fJkO,WABR(PrLj,:));
+ [BceY pPZr] = sdsO(lzpH,U1_6,rtf5,pvu3(PrLj,:));
+ [mR4E M7eC] = sdsO(pPZr,BceY,ATWm,pvu3(PrLj,:));
+ else
+ [U1_6 lzpH] = La8O(wbkl,4,WABR(PrLj,:));
+ [mR4E M7eC] = sdsO(lzpH,U1_6,11,pvu3(PrLj,:));
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 HwSv = 1:2
+ if PrLj == 2 && HwSv == 2 && Fx8_ > 2100, return, end
+ n3Es = si0k(wbkl,M7eC,mR4E,Ya8F,ATWm,A2oU(HwSv,:))-1;
+ Pe9I = KAIg(B,n3Es);
+ if Pe9I <= Fx8_
+ Fx8_ = Pe9I;
+ W = n3Es;
+ Ya8F = Ya8F - 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 jxrF*CK3x > 290; return; end
+ SNxt = sum(W(:,1)==W(:,3)&W(:,2)==W(:,4));
+ if SNxt <= 4
+ t338 = pFb8(B);
+ fmgs = KAIg(B,t338);
+ if fmgs < Fx8_
+ W = t338;
+ Fx8_ = fmgs;
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 = Jc4U(B,ecGD,HpQh,u4in,ATWm,tApj)
+ function path = N5BB(YQUd,Q8W1,DBuO)
+ ziNW(YQUd,Q8W1) = ufpD(xOHJ);
+ gPQr(YQUd,Q8W1) = VHri(xOHJ);
+ path = zeros(DBuO,4);
+ for SQMB = 1:DBuO
+ path(SQMB,1:2) = [YQUd Q8W1];
+ oZXe = ziNW(YQUd,Q8W1);
+ ptRw = gPQr(YQUd,Q8W1);
+ path(SQMB,3:4) = [oZXe ptRw];
+ YQUd = oZXe;
+ Q8W1 = ptRw;
+ end
+ end
+ [Vjlw Bbve] = size(B);
+ ziNW = zeros(Vjlw,Bbve);
+ gPQr = zeros(Vjlw,Bbve);
+ H4Ha = -ones(Vjlw,Bbve);
+ H4Ha(ecGD(2),HpQh(2)) = 0;
+ H4Ha(ecGD(1),HpQh(1)) = -2;
+ H4Ha( B == u4in ) = -2;
+ vVGM = zeros(Vjlw*Bbve,1);
+ iqVA = zeros(Vjlw*Bbve,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
+ vVGM(1) = ecGD(2);
+ iqVA(1) = HpQh(2);
+ RXNO=[-1 1 0 0];
+ rwGc=[0 0 -1 1];
+ for step = 0:min(ATWm,tApj)
+ if count < 1, break, end
+ gmtQ = count;
+ ufpD = vVGM(1:gmtQ);
+ VHri = iqVA(1:gmtQ);
+ count = 0;
+ for xOHJ = 1:gmtQ
+ tY_q = VHri(xOHJ);
+ dy1_ = ufpD(xOHJ);
+ for XhQd=1:4
+ YQUd = dy1_ + RXNO(XhQd);
+ Q8W1 = tY_q + rwGc(XhQd);
+ XXLE = YQUd + (Q8W1-1)*Vjlw;
+ RHtg = H4Ha(XXLE);
+ if RHtg == -2
+ path = N5BB(YQUd,Q8W1,step+1);
+ return
+ elseif RHtg == -1 && B(XXLE) == 0
+ H4Ha(XXLE) = step+1;
+ ziNW(XXLE) = dy1_;
+ gPQr(XXLE) = tY_q;
+ count = count + 1; vVGM(count) = YQUd; iqVA(count) = Q8W1;
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 qX1Z = pFb8(FBrt)
+ XyoA = unique(FBrt);
+ XyoA(1) = [];
+ USaz = zeros(size(XyoA));
+ for xOHJ = 1:length(USaz)
+ USaz(xOHJ) = nnz(XyoA(xOHJ) == FBrt(:));
end
- for i = 1:length(n)
- if n(i) == 1
- b(p(i) == b(:)) = -1;
- end
+ for xOHJ = 1:length(USaz)
+ if USaz(xOHJ) == 1
+ FBrt(XyoA(xOHJ) == FBrt(:)) = -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
+ DxlF = zeros(size(FBrt)+2);
+ XDtT = repmat(-1,size(DxlF));
+ XDtT(2:end-1,2:end-1) = FBrt;
+ qX1Z = [];
+ [eZW0, QV6_] = find(XDtT>0);
+ Usv0 = (size(XDtT,1)/2 - eZW0).^2 + (size(XDtT,2)/2 - QV6_).^2;
+ [Usv0, order] = sort(Usv0);
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 jFUm = 1:length(eZW0)-1
+ jl0w = 0;
+ WDNu = 32;
+ for xOHJ = order
+ if DxlF(eZW0(xOHJ), QV6_(xOHJ))
+ continue
end
- w = w - 1;
+ [WpVp, PxAW, PBW9] = iPLu(XDtT, DxlF, eZW0(xOHJ), QV6_(xOHJ), WDNu);
+ if WpVp > jl0w
+ jl0w = WpVp;
+ Rlfy = PxAW;
+ WDNu = PBW9;
+ if WDNu == 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 jl0w == 0
+ qX1Z = qX1Z - 1;
+ return
end
- bestscore = b(z,zC) - minsteps;
- if minsteps == 1
- bestmove = [z, zC, Cw4BfzRNQ6, qpF1lfOV53];
- return
+ DxlF = eX3Y(DxlF, Rlfy, XDtT(Rlfy(1,1), Rlfy(1,2)));
+ XDtT = eX3Y(XDtT, Rlfy, XDtT(Rlfy(1,1), Rlfy(1,2)));
+ qX1Z = [qX1Z; Rlfy];
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;
+ qX1Z = qX1Z - 1;
end
+ function [jl0w, Rlfy, WDNu] = iPLu(FBrt, DxlF, f3Q0, VHri, kKiK)
+ jl0w = 0;
+ Rlfy = [];
+ SQMB = [1 -1 0 0];
+ jFUm = [0 0 1 -1];
+ if ~any(DxlF(:)==FBrt(f3Q0,VHri))
+ DxlF = FBrt;
end
-
-
- function [W B] = phase1_a(B,cutoff,rz)
+ XDtT = FBrt;
+ XDtT(XDtT>0) = -1;
+ XDtT(f3Q0,VHri) = 1;
+ WDNu = Inf;
+ XyoA = FBrt(f3Q0,VHri);
+ for xOHJ = 1:kKiK-2
+ [eZW0, QV6_] = find(XDtT==xOHJ);
+ for USaz = 1:length(eZW0)
+ for a52_ = 1:4
+ Z2B5 = eZW0(USaz) + SQMB(a52_);
+ zWQw = QV6_(USaz) + jFUm(a52_);
+ if DxlF(Z2B5,zWQw) == XyoA && ~(Z2B5 == f3Q0 && zWQw == VHri)
+ WDNu = xOHJ;
+ break
+ end
+ I_0Z = XDtT(Z2B5,zWQw);
+ if I_0Z == 0
+ XDtT(Z2B5,zWQw) = xOHJ+1;
+ end
+ end
+ if WDNu < Inf
+ break
+ end
+ end
+ if WDNu < Inf
+ break
+ end
+ end
+ if WDNu == Inf
+ return
+ end
+ jl0w = FBrt(f3Q0,VHri) - WDNu;
+ if WDNu == 1
+ Rlfy = [f3Q0, VHri, Z2B5, zWQw];
+ return
+ end
+ Rlfy = zeros(WDNu,4);
+ for step = WDNu:-1:1
+ for a52_ = 1:4
+ cY0k = Z2B5 + SQMB(a52_);
+ RJ5L = zWQw + jFUm(a52_);
+ if XDtT(cY0k, RJ5L) == step
+ break
+ end
+ end
+ Rlfy(step,:) = [cY0k, RJ5L, Z2B5, zWQw];
+ Z2B5 = cY0k;
+ zWQw = RJ5L;
+ end
+ end
+ function [W B] = La8O(B,ATWm,u5tr)
W = [];
- [pincount k] = analyzeboard(B,rz);
- if k < 1
- return
+ [mgVc jFUm] = srCC(B,u5tr);
+ if jFUm < 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
+ mgVc=sortrows(mgVc,-u5tr);
+ for xOHJ = 1:jFUm
+ if mgVc(xOHJ,2) >= 2
+ XyoA = mgVc(xOHJ,1);
+ [ecGD HpQh] = find(B == XyoA);
+ gmtQ = size(ecGD,1);
+ uvvt = gmtQ*(gmtQ-1)/2;
+ dist = zeros(uvvt,3);
+ PrLj = 0;
+ for aCau = 1:gmtQ
+ for FBrt = (aCau+1):gmtQ
+ PrLj = PrLj + 1;
+ dist(PrLj,1) = aCau;
+ dist(PrLj,2) = FBrt;
+ dist(PrLj,3) = abs(ecGD(aCau)-ecGD(FBrt)) + abs(HpQh(aCau)-HpQh(FBrt));
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
+ [Usv0 zDzc] = sort(dist(:,3));
+ dist = dist(zDzc,:);
+ GX3_ = reshape(dist(:,1:2)',[],1);
+ VfeB = 0;
+ aWxX = 1;
+ c5Sm = false(gmtQ,1);
+ for xOHJ=1:gmtQ
+ Iqpn = find( ~c5Sm(GX3_(aWxX:end)) , 1 , 'first');
+ if isempty(Iqpn)
+ break
end
+ aCau = GX3_(Iqpn);
+ Distance = abs(ecGD([1:aCau-1,aCau+1:end]')-ecGD(aCau)) + abs(HpQh([1:aCau-1,aCau+1:end]')-HpQh(aCau));
+ if max(Distance)>ATWm-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 = ZQeg(B,ecGD(aCau),HpQh(aCau),ecGD([1:aCau-1,aCau+1:end]'),HpQh([1:aCau-1,aCau+1:end]'), -XyoA, ATWm, 2*XyoA);
+ if size(path,1) > 0
+ W = [W; path];
+ B = eX3Y(B,path,-XyoA);
+ VfeB = 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 VfeB < 2
+ continue
end
+ for SQMB = 3:gmtQ
+ [Sd89 HZPi] = find(B == -XyoA);
+ [ecGD HpQh] = find(B == XyoA);
+ [vFgz,AnVf] = meshgrid(ecGD,Sd89);
+ [ugps,bS6n] = meshgrid(ecGD,Sd89);
+ Distance = abs(vFgz-AnVf) + abs(ugps-bS6n);
+ if max(Distance(:))>ATWm-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 = ZQeg(B,Sd89,HZPi,ecGD,HpQh, -XyoA, ATWm, 2*XyoA);
+ if size(path,1) > 0
+ W = [W; path];
+ B = eX3Y(B,path,-XyoA);
+ XMdP = true;
+ else
+ break
+ end
+ end
+ end
+ end
+ end
+ function [W B] = sdsO(B,W,uI0n,u5tr)
+ [mgVc jFUm] = srCC(B,u5tr);
+ if jFUm < 1, return, end
+ mgVc=sortrows(mgVc,-u5tr);
+ for xOHJ = 1:jFUm
+ XyoA = mgVc(xOHJ,1);
+ RPq7 = sum(B == -XyoA);
+ if RPq7 == 0
+ if mgVc(xOHJ,2) >= 2
+ [ecGD HpQh] = find(B == XyoA);
+ gmtQ = size(ecGD,1);
+ uvvt = gmtQ*(gmtQ-1)/2;
+ dist = zeros(uvvt,3);
+ PrLj = 0;
+ for aCau = 1:gmtQ
+ for FBrt = (aCau+1):gmtQ
+ PrLj = PrLj + 1;
+ dist(PrLj,1) = aCau;
+ dist(PrLj,2) = FBrt;
+ dist(PrLj,3) = abs(ecGD(aCau)-ecGD(FBrt)) + abs(HpQh(aCau)-HpQh(FBrt));
+ end
+ end
+ [Usv0 zDzc] = sort(dist(:,3));
+ dist = dist(zDzc,:);
+ maxstep = min(uI0n,2*XyoA+1);
+ XMdP = false;
+ for PrLj = 1:uvvt
+ if dist(PrLj,3) > maxstep+1
+ break
+ end
+ aCau = dist(PrLj,1);
+ FBrt = dist(PrLj,2);
+ path = Jc4U(B,[ecGD(aCau); ecGD(FBrt)], [HpQh(aCau); HpQh(FBrt)], -XyoA, uI0n, 2*XyoA);
+ if size(path,1) > 0
+ W = [W; path];
+ B = eX3Y(B,path,-XyoA);
+ XMdP = true;
+ break
+ end
+ end
+ if ~XMdP
+ continue
+ end
+ end
+ end
+ [ecGD HpQh] = find(B == XyoA);
+ g2b_ = size(ecGD,1);
+ maxstep = min(uI0n,XyoA+1);
+ for SQMB = 1:g2b_
+ [Sd89 HZPi] = find(B == -XyoA);
+ [ecGD HpQh] = find(B == XyoA);
+ XMdP = false;
+ path = ZQeg(B,Sd89,HZPi,ecGD,HpQh, -XyoA, uI0n, XyoA);
+ if size(path,1) > 0
+ W = [W; path];
+ B = eX3Y(B,path,-XyoA);
+ XMdP = true;
+ end
+ if ~XMdP
+ break
+ end
+ end
+ end
+ end
+ function [W B] = si0k(QPcb,B,W,Ya8F,uI0n,u5tr)
+ function FkJD()
+ for qX1Z = 1:size(path,1);
+ if path(qX1Z,1) == path(qX1Z,3)
+ ybHE(path(qX1Z,1),path(qX1Z,2)) = false;
+ ybHE(path(qX1Z,3),path(qX1Z,4)) = false;
+ if path(qX1Z,2) == path(qX1Z,4)
+ B(path(qX1Z,1),path(qX1Z,2)) = -9999;
+ end
+ end
+ if path(qX1Z,2) == path(qX1Z,4)
+ Ux1V(path(qX1Z,1),path(qX1Z,2)) = false;
+ Ux1V(path(qX1Z,3),path(qX1Z,4)) = false;
+ end
+ end
+ end
+ [ybHE Ux1V] = l8f0(QPcb,B,W);
+ [mgVc jFUm] = srCC(B,u5tr);
+ if jFUm < 1, return, end
+ mgVc=sortrows(mgVc,-u5tr);
+ for xOHJ = 1:jFUm
+ XyoA = mgVc(xOHJ,1);
+ RPq7 = sum(B == -XyoA);
+ if RPq7 == 0
+ if mgVc(xOHJ,2) >= 2
+ [ecGD HpQh] = find(B == XyoA);
+ gmtQ = size(ecGD,1);
+ uvvt = gmtQ*(gmtQ-1)/2;
+ dist = zeros(uvvt,3);
+ PrLj = 0;
+ for aCau = 1:gmtQ
+ for FBrt = (aCau+1):gmtQ
+ PrLj = PrLj + 1;
+ dist(PrLj,1) = aCau;
+ dist(PrLj,2) = FBrt;
+ dist(PrLj,3) = abs(ecGD(aCau)-ecGD(FBrt)) + abs(HpQh(aCau)-HpQh(FBrt));
+ end
+ end
+ [Usv0 zDzc] = sort(dist(:,3));
+ dist = dist(zDzc,:);
+ maxstep = min((Ya8F*25)+uI0n,2*XyoA+1);
+ XMdP = false;
+ for PrLj = 1:uvvt
+ if dist(PrLj,3) > maxstep+1
+ break
+ end
+ aCau = dist(PrLj,1);
+ FBrt = dist(PrLj,2);
+ path = t2Vc(B,ybHE,Ux1V,[ecGD(aCau); ecGD(FBrt)], [HpQh(aCau); HpQh(FBrt)], -XyoA, Ya8F, uI0n, 2*XyoA);
+ if size(path,1) > 0
+ W = [W; path];
+ B = eX3Y(B,path,-XyoA);
+ FkJD();
+ XMdP = true;
+ break
+ end
+ end
+ if ~XMdP
+ continue
+ end
+ end
+ end
+ [ecGD HpQh] = find(B == XyoA);
+ g2b_ = size(ecGD,1);
+ maxstep = min((Ya8F*25)+uI0n,XyoA+1);
+ for SQMB = 1:g2b_
+ [Sd89 HZPi] = find(B == -XyoA);
+ [ecGD HpQh] = find(B == XyoA);
+ XMdP = false;
+ path = UxOn(B,ybHE,Ux1V,Sd89,HZPi,ecGD,HpQh, -XyoA, Ya8F, uI0n, XyoA);
+ if size(path,1) > 0
+ W = [W; path];
+ B = eX3Y(B,path,-XyoA);
+ FkJD();
+ XMdP = true;
+ end
+ if ~XMdP
+ break
+ end
+ end
+ end
+ end
+ function path = UxOn(B,ZaS2,Y7wF,rowS,colS,OLZ0,AXZ1,u4in,Ya8F,qqwx,tApj)
+ function path = i2kt(XXLE,step)
+ AcrO(XXLE) = dy1_;
+ path = zeros(step,4);
+ kkTm = 0;
+ l0jx = 0;
+ FuJZ = zeros(step,1);
+ oVz6 = zeros(step,1);
+ r6sL = zeros(step,1);
+ while isempty(find(BKF2==XXLE,1))
+ kkTm = kkTm + 1;
+ FuJZ(kkTm,1) = XXLE;
+ YA3Q = AcrO(XXLE);
+ oVz6(kkTm,1) = YA3Q;
+ XXLE = YA3Q;
+ if CMNQ(XXLE)
+ l0jx = l0jx + 1;
+ r6sL(l0jx,1) = XXLE;
+ end
+ end
+ FuJZ = [ FuJZ(1:kkTm,:) ; r6sL(1:l0jx,1) ];
+ oVz6 = [ oVz6(1:kkTm,:) ; r6sL(1:l0jx,1) ];
+ path = [ mod(FuJZ,Vjlw) , ceil(FuJZ/Vjlw) , mod(oVz6,Vjlw) , ceil(oVz6/Vjlw) ];
+ end
+ [Vjlw Bbve] = size(B);
+ CMNQ = false(Vjlw,Bbve);
+ AcrO = zeros(Vjlw,Bbve);
+ H4Ha = -ones(Vjlw,Bbve);
+ BKF2 = rowS + (colS-1)*Vjlw;
+ H4Ha(BKF2) = 0;
+ H4Ha(OLZ0 + (AXZ1-1)*Vjlw) = -2;
+ maxstep = min((Ya8F*25)+qqwx,tApj+1);
+ Sut9 = zeros(maxstep+26,1);
+ prAp = [-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
+ f3Q0 = BKF2;
+ elseif Sut9(step) == 0
+ continue
+ else
+ f3Q0 = find(H4Ha == step);
end
+ gmtQ = numel(f3Q0);
+ for xOHJ = 1:gmtQ
+ dy1_ = f3Q0(xOHJ);
+ for ZhhA = 1:2
+ XXLE = dy1_ + prAp(ZhhA) * Vjlw;
+ RHtg = H4Ha(XXLE);
+ if RHtg == -2
+ path = i2kt(XXLE,step+1);
+ return
+ elseif RHtg == -1
+ if B(XXLE) == 0
+ H4Ha(XXLE) = step+1; Sut9(step+1) = 1;
+ AcrO(XXLE) = dy1_;
+ elseif ZaS2(XXLE)
+ H4Ha(XXLE) = step+26; Sut9(step+26) = 1;
+ AcrO(XXLE) = dy1_;
+ CMNQ(XXLE) = true;
+ end
+ end
+ end
+ for ZhhA = 1:2
+ XXLE = dy1_ + prAp(ZhhA);
+ RHtg = H4Ha(XXLE);
+ if RHtg == -2
+ path = i2kt(XXLE,step+1);
+ return
+ elseif RHtg == -1
+ if B(XXLE) == 0
+ H4Ha(XXLE) = step+1; Sut9(step+1) = 1;
+ AcrO(XXLE) = dy1_;
+ elseif Y7wF(XXLE)
+ H4Ha(XXLE) = step+26; Sut9(step+26) = 1;
+ AcrO(XXLE) = dy1_;
+ CMNQ(XXLE) = 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 = ZQeg(B,rowS,colS,QCnW,Fbwo,u4in,ATWm,tApj)
+ [Vjlw Bbve] = size(B);
+ ziNW = zeros(Vjlw,Bbve);
+ gPQr = zeros(Vjlw,Bbve);
+ H4Ha = -ones(Vjlw,Bbve);
+ H4Ha(rowS+(colS-1)*Vjlw) = 0;
+ H4Ha(QCnW+(Fbwo-1)*Vjlw) = -2;
+ LSKV = zeros(Vjlw*Bbve,1);
+ iqVA = zeros(Vjlw*Bbve,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
+ LSKV(1:count) = rowS;
+ iqVA(1:count) = colS;
+ RXNO=[-1 1 0 0];
+ rwGc=[0 0 -1 1];
+ for step = 0:min(ATWm,tApj)
+ if count < 1, break, end
+ gmtQ = count;
+ ufpD = LSKV(1:gmtQ);
+ VHri = iqVA(1:gmtQ);
+ count = 0;
+ for xOHJ = 1:gmtQ
+ tY_q = VHri(xOHJ);
+ dy1_ = ufpD(xOHJ);
+ for XhQd=1:4
+ YQUd = dy1_ + RXNO(XhQd);
+ Q8W1 = tY_q + rwGc(XhQd);
+ XXLE = YQUd + (Q8W1-1)*Vjlw;
+ RHtg = H4Ha(XXLE);
+ if RHtg == -2
+ DBuO=step+1;
+ ziNW(YQUd,Q8W1) = ufpD(xOHJ);
+ gPQr(YQUd,Q8W1) = VHri(xOHJ);
+ path = zeros(DBuO,4);
+ for SQMB = 1:DBuO
+ path(SQMB,1:2) = [YQUd Q8W1];
+ oZXe = ziNW(YQUd,Q8W1);
+ ptRw = gPQr(YQUd,Q8W1);
+ path(SQMB,3:4) = [oZXe ptRw];
+ YQUd = oZXe;
+ Q8W1 = ptRw;
end
+ return
+ end
+ if RHtg == -1 && B(XXLE) == 0
+ H4Ha(XXLE) = step+1;
+ ziNW(XXLE) = dy1_;
+ gPQr(XXLE) = tY_q;
+ count = count + 1; LSKV(count) = YQUd; iqVA(count) = Q8W1;
+ end
+ end
+ end
+ end
path = [];
- end+ end
|