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