function W = solv(B)
ZU7i=376;
JqBe = rand(43,1);
W=v8UO(B);
lYto = SdUN(B,W);
[xBYc,v5ep] = size(B);
qKEr = B(xBYc:-1:1,:);
qKEr = qKEr.';
[SuWy,Ef5j] = jysa(qKEr,[1 2],[1 2],4*xBYc*v5ep);
if lYto > Ef5j
W = [xBYc-SuWy(:,2)+1 SuWy(:,1) xBYc-SuWy(:,4)+1 SuWy(:,3)];
lYto=Ef5j;
end
y2o8=rand('state');
rand(ZU7i,1);
if lYto>1000 && rand<.5
[SuWy,Ef5j] = jysa(qKEr,[1 2],[1 2],4*xBYc*v5ep);
if lYto > Ef5j
W = [xBYc-SuWy(:,2)+1 SuWy(:,1) xBYc-SuWy(:,4)+1 SuWy(:,3)];
lYto=Ef5j;
end
end
if lYto>1000 && rand<.5
[SuWy,Ef5j] = jysa(qKEr,[1 2],[1 2],4*xBYc*v5ep);
if lYto > Ef5j
W = [xBYc-SuWy(:,2)+1 SuWy(:,1) xBYc-SuWy(:,4)+1 SuWy(:,3)];
lYto=Ef5j;
end
end
rand('state',y2o8);
end
function [W,lYto] = jysa(u7bO,fmTq,slMO,fSAH)
[WWGB,Flut]=size(u7bO);
UbcZ= -ones(WWGB+2,Flut+2);
UbcZ(2:end-1,2:end-1)=u7bO;
lz5o = UbcZ;
e7g9 = 4;
if size(lz5o,2) > 20
Cfr5 = 4;
jecL = 8;
VfDr = 18;
else
Cfr5 = 3;
jecL = 7;
VfDr = 13;
end
lYto = inf;
wKCd = [1 2;2 1];
urTY = [1 3;3 1];
cVj7 = [3 2 1;1 2 3];
for H19D = fmTq
if H19D == 2
[y8t4 KVqX] = ge0K(lz5o,Cfr5,wKCd(H19D,:));
[HYIm SJTW] = z0oL(KVqX,y8t4,jecL,urTY(H19D,:));
[L2Ea DsrZ] = z0oL(SJTW,HYIm,VfDr,urTY(H19D,:));
else
[y8t4 KVqX] = ge0K(lz5o,4,wKCd(H19D,:));
[L2Ea DsrZ] = z0oL(KVqX,y8t4,11,urTY(H19D,:));
end
for v3Rx = slMO
ySOz = bAMj(lz5o,DsrZ,L2Ea,e7g9,VfDr,cVj7(v3Rx,:))-1;
vclZ = SdUN(u7bO,ySOz);
if vclZ <= lYto
lYto = vclZ;
W = ySOz;
e7g9 = e7g9 - 1;
end
end
end
end
function PA8B = SdUN(B,W)
WWGB=size(B,1);
B(W(:,1)+(W(:,2)-1)*WWGB)=0;
B(W(:,3)+(W(:,4)-1)*WWGB)=0;
PA8B=sum(B(:))+size(W,1)+sum(W(:,1)==W(:,3)&W(:,2)==W(:,4))*24;
end
function [c3EP nku6] = U2Lr(B,AhlV)
Pt9C = sort(B(B>0),'descend');
k_Ti = size(Pt9C,1);
if k_Ti < 1
c3EP = [];
nku6 = 0;
return
end
fhTg=Pt9C(diff([0;Pt9C])~=0);
c3EP = zeros(nnz(fhTg),3);
Wpe_=histc(Pt9C,fhTg(end:-1:1));
c3EP(:,1)=fhTg;
c3EP(:,2)=Wpe_(end:-1:1);
nku6=nnz(fhTg);
if AhlV < 3, return, end
for MsWS = 1:nku6
if c3EP(MsWS,2) >= 2
NnD0 = c3EP(MsWS,1);
[RqaD PyGh] = find(B == NnD0);
l2Sp = 0;
u0Sg = size(RqaD,1);
l2Sp=sum(abs(diff(RqaD))+abs(diff(PyGh)));
c3EP(MsWS,3) = c3EP(MsWS,2)*NnD0 - 0.85 * l2Sp;
end
end
end
function [W B] = ge0K(B,VfDr,AhlV)
W = [];
[c3EP nku6] = U2Lr(B,AhlV);
if nku6 < 1
return
end
c3EP=sortrows(c3EP,-AhlV);
for MsWS = 1:nku6
if c3EP(MsWS,2) >= 2
NnD0 = c3EP(MsWS,1);
[RqaD PyGh] = find(B == NnD0);
u0Sg = size(RqaD,1);
p70_ = u0Sg*(u0Sg-1)/2;
dist = zeros(p70_,3);
[osQV L3jE]=find(tril(ones(u0Sg),-1));
dist(:,1)=L3jE;
dist(:,2)=osQV;
dist(:,3)=abs(PyGh(osQV)-PyGh(L3jE))+abs(RqaD(osQV)-RqaD(L3jE));
[l2Sp D7ma] = sort(dist(:,3));
dist = dist(D7ma,:);
k_Ti = 0;
for H19D = 1:p70_
if dist(H19D,3) > VfDr+1
break
end
BGmn = dist(H19D,1);
ih7P = dist(H19D,2);
path = mjDj(B,[RqaD(BGmn); RqaD(ih7P)], [PyGh(BGmn); PyGh(ih7P)], -NnD0, VfDr, 2*NnD0);
if size(path,1) > 0
W = [W; path];
B = DTy1(B,path,-NnD0);
k_Ti = 2;
edit = [1:(BGmn-1) (BGmn+1):(ih7P-1) (ih7P+1):u0Sg];
RqaD = [RqaD(BGmn); RqaD(ih7P); RqaD(edit)];
PyGh = [PyGh(BGmn); PyGh(ih7P); PyGh(edit)];
break
else
end
end
if k_Ti < 2
continue
end
for KdkH = 3:u0Sg
[n3fL nRWZ] = find(B == -NnD0);
IkcA = size(n3fL,1);
p70_ = IkcA * (u0Sg - k_Ti);
iPW2 = (1:IkcA*u0Sg)';
ih7P=mod(iPW2-1,u0Sg)+1;
BGmn=ceil(iPW2/u0Sg);
dFh3 = (ih7P>k_Ti);
BGmn = BGmn(dFh3);
ih7P = ih7P(dFh3);
l2Sp = abs(n3fL(BGmn)-RqaD(ih7P)) + abs(nRWZ(BGmn)-PyGh(ih7P));
dist = [BGmn,ih7P,l2Sp];
[l2Sp D7ma] = sort(dist(:,3));
dist = dist(D7ma,:);
kIuZ = false(u0Sg,1);
gezb = false;
for H19D = 1:p70_
if dist(H19D,3) > VfDr+1
break
end
ih7P = dist(H19D,2);
if kIuZ(ih7P)
randperm(4);
continue
end
BGmn = dist(H19D,1);
path = mjDj(B,[n3fL(BGmn); RqaD(ih7P)], [nRWZ(BGmn); PyGh(ih7P)], -NnD0, VfDr, NnD0);
kIuZ(ih7P)=true;
if size(path,1) > 0
W = [W; path];
B = DTy1(B,path,-NnD0);
k_Ti = k_Ti + 1;
gezb = true;
RqaD([KdkH ih7P]) = RqaD([ih7P KdkH]);
PyGh([KdkH ih7P]) = PyGh([ih7P KdkH]);
break
end
end
if ~gezb
break
end
end
end
end
end
function [W B] = z0oL(B,W,vphg,AhlV)
[c3EP nku6] = U2Lr(B,AhlV);
if nku6 < 1, return, end
c3EP=sortrows(c3EP,-AhlV);
for MsWS = 1:nku6
NnD0 = c3EP(MsWS,1);
IkcA = sum(B == -NnD0);
if IkcA == 0
if c3EP(MsWS,2) >= 2
[RqaD PyGh] = find(B == NnD0);
u0Sg = size(RqaD,1);
p70_ = u0Sg*(u0Sg-1)*.5;
iPW2 = (1:u0Sg*u0Sg)';
ih7P=mod(iPW2-1,u0Sg)+1;
BGmn=ceil(iPW2/u0Sg);
dFh3 = (BGmn<ih7P);
BGmn = BGmn(dFh3);
ih7P = ih7P(dFh3);
l2Sp = abs(RqaD(BGmn)-RqaD(ih7P)) + abs(PyGh(BGmn)-PyGh(ih7P));
dist = [BGmn,ih7P,l2Sp];
[l2Sp D7ma] = sort(dist(:,3));
dist = dist(D7ma,:);
maxstep = min(vphg,2*NnD0+1);
gezb = false;
for H19D = 1:p70_
if dist(H19D,3) > maxstep+1
break
end
BGmn = dist(H19D,1);
ih7P = dist(H19D,2);
path = mjDj(B,[RqaD(BGmn); RqaD(ih7P)], [PyGh(BGmn); PyGh(ih7P)], -NnD0, vphg, 2*NnD0);
if size(path,1) > 0
W = [W; path];
B = DTy1(B,path,-NnD0);
gezb = true;
break
end
end
if ~gezb
continue
end
end
end
[RqaD PyGh] = find(B == NnD0);
U1ey = size(RqaD,1);
maxstep = min(vphg,NnD0+1);
for KdkH = 1:U1ey
[n3fL nRWZ] = find(B == -NnD0);
IkcA = size(n3fL,1);
p70_ = IkcA * (U1ey-KdkH+1);
iPW2 = (1:IkcA*U1ey)';
ih7P=mod(iPW2-1,U1ey)+1;
BGmn=ceil(iPW2/U1ey);
dFh3 = (ih7P>=KdkH);
BGmn = BGmn(dFh3);
ih7P = ih7P(dFh3);
l2Sp = abs(n3fL(BGmn)-RqaD(ih7P)) + abs(nRWZ(BGmn)-PyGh(ih7P));
dist = [BGmn,ih7P,l2Sp];
[l2Sp D7ma] = sort(dist(:,3));
dist = dist(D7ma,:);
kIuZ = false(U1ey,1);
gezb = false;
for H19D = 1:p70_
if dist(H19D,3) > maxstep+1
break
end
ih7P = dist(H19D,2);
if kIuZ(ih7P)
randperm(4);
continue
end
BGmn = dist(H19D,1);
path = mjDj(B,[n3fL(BGmn); RqaD(ih7P)], [nRWZ(BGmn); PyGh(ih7P)], -NnD0, vphg, 2*NnD0);
kIuZ(ih7P)=true;
if size(path,1) > 0
W = [W; path];
B = DTy1(B,path,-NnD0);
gezb = true;
RqaD([KdkH ih7P]) = RqaD([ih7P KdkH]);
PyGh([KdkH ih7P]) = PyGh([ih7P KdkH]);
break
end
end
if ~gezb
break
end
end
end
end
function [JEiY wYjC] = B_qU(UbcZ,B,path)
[LgSP xKPD] = size(B);
JEiY = UbcZ == 0;
wYjC = JEiY;
JEiY(:,[1 xKPD]) = false;
wYjC([1 LgSP],:) = false;
for MsWS = 1:size(path,1)
if path(MsWS,1) == path(MsWS,3)
JEiY(path(MsWS,1),path(MsWS,2)) = false;
JEiY(path(MsWS,3),path(MsWS,4)) = false;
end
if path(MsWS,2) == path(MsWS,4)
wYjC(path(MsWS,1),path(MsWS,2)) = false;
wYjC(path(MsWS,3),path(MsWS,4)) = false;
end
end
end
function B = DTy1(B,path,w3f6)
B(path(1,1),path(1,2)) = w3f6;
for MsWS = 1:size(path,1);
B(path(MsWS,3),path(MsWS,4)) = w3f6;
end
end
function path = MwwU(znnU,iy4v,LgSP,CkHy)
path = zeros(CkHy,4);
lOul = mod(znnU,LgSP);
PS5h = ceil(znnU/LgSP);
for KdkH = 1:CkHy
path(KdkH,1:2) = [lOul PS5h];
znnU = iy4v(znnU);
lOul = mod(znnU,LgSP);
PS5h = ceil(znnU/LgSP);
path(KdkH,3:4) = [lOul PS5h];
end
end
function path = mjDj(B,RqaD,PyGh,w3f6,VfDr,zuBO)
[LgSP xKPD] = size(B);
iy4v = zeros(LgSP,xKPD);
dBmm = -ones(LgSP,xKPD);
dBmm(RqaD(2),PyGh(2)) = 0;
dBmm(RqaD(1),PyGh(1)) = -2;
dBmm( B == w3f6 ) = -2;
Ctkt = zeros(LgSP*xKPD,1);
Ctkt(1) = RqaD(2) + (PyGh(2)-1)*LgSP;
count = 1;
RFih = [-1 1 -LgSP LgSP];
WaTm = randperm(4);
for step = 0:min(VfDr,zuBO)
if count < 1, break, end
u0Sg = count;
znnU = Ctkt;
count = 0;
for MsWS = 1:u0Sg
JWrY = znnU(MsWS);
for ljIJ=1:4
eKnv = JWrY + RFih(WaTm(ljIJ));
tKi8 = dBmm(eKnv);
if tKi8 == -2
iy4v(eKnv) = JWrY;
path = MwwU(eKnv,iy4v,LgSP,step+1);
return
end
if tKi8 == -1 && B(eKnv) == 0
dBmm(eKnv) = step+1;
iy4v(eKnv) = JWrY;
count = count + 1;
Ctkt(count) = eKnv;
end
end
end
end
path = [];
end
function path = U3aA(B,JEiY,wYjC,RqaD,PyGh,w3f6,e7g9,vphg,zuBO)
[LgSP xKPD] = size(B);
oqP_ = false(LgSP,xKPD);
iy4v = zeros(LgSP,xKPD);
dBmm = -ones(LgSP,xKPD);
dBmm(RqaD(1),PyGh(1)) = -2;
dBmm( B == w3f6 ) = -2;
maxstep = min((e7g9*27)+vphg,zuBO+1);
ppHC = zeros(maxstep+28,1);
ppHC(1) = RqaD(2) + (PyGh(2)-1)*LgSP;
RFih = [-LgSP LgSP -1 1];
for step = 1:maxstep
while ppHC(step)>0
JWrY = ppHC(step);
ppHC(step)=dBmm(JWrY);
for ljIJ = 1:4
eKnv = JWrY + RFih(ljIJ);
tKi8 = dBmm(eKnv);
if tKi8==-1
if B(eKnv) == 0
dBmm(eKnv) = ppHC(step+1);
ppHC(step+1) = eKnv;
iy4v(eKnv) = JWrY;
elseif (JEiY(eKnv)&&(ljIJ<3)) || (wYjC(eKnv)&&(ljIJ>2))
dBmm(eKnv) = ppHC(step+26);
ppHC(step+26) = eKnv;
iy4v(eKnv) = JWrY;
oqP_(eKnv) = true;
end
end
if tKi8==-2
step=step+1;
iy4v(eKnv) = JWrY;
lOul=mod(eKnv,LgSP);
PS5h=ceil(eKnv/LgSP);
path = zeros(step,4);
KdkH = 0;
while lOul ~= RqaD(2) || PS5h ~= PyGh(2)
KdkH = KdkH + 1;
path(KdkH,1:2) = [lOul PS5h];
eKnv = lOul + (PS5h-1)*LgSP;
SH0Z = iy4v(eKnv);
kpcQ=mod(SH0Z,LgSP);
QBm8=ceil(SH0Z/LgSP);
path(KdkH,3:4) = [kpcQ QBm8];
lOul = kpcQ;
PS5h = QBm8;
if oqP_(lOul,PS5h)
KdkH = KdkH + 1;
path(KdkH,:) = [lOul PS5h lOul PS5h];
end
end
path = path(1:KdkH,:);
return
end
end
end
end
path = [];
end
function W = v8UO(B)
[W,lYto] = T0mM(B);
LKWU = 0;
ocpS = round(mod(B(:),2));
if lYto < 2100
return
end
[KKoW,wg7j] = size(B);
B = flipud(fliplr(B'));
[TmnD,dkSE] = T0mM(B);
if lYto > dkSE
W = [KKoW-TmnD(:,2)+1 wg7j-TmnD(:,1)+1 KKoW-TmnD(:,4)+1 wg7j-TmnD(:,3)+1];
end
if ocpS~=LKWU; W = zeros(0,4); end
end
function [W,lYto] = T0mM(B)
[WWGB,Flut]=size(B);
FGOi=nan(WWGB+2,Flut+2);
FGOi(2:end-1,2:end-1)=B;
lz5o = FGOi;
e7g9 = 4;
if size(lz5o,2) > 20
Cfr5 = 4;
jecL = 8;
VfDr = 12;
else
Cfr5 = 3;
jecL = 7;
VfDr = 11;
end
lYto = inf;
wKCd = [1 2;2 1];
urTY = [1 3;3 1];
cVj7 = [3 2 1;1 2 3];
for H19D = 1:2
if H19D == 2
[y8t4 KVqX] = PrW_(lz5o,Cfr5,wKCd(H19D,:));
[HYIm SJTW] = yLaG(KVqX,y8t4,jecL,urTY(H19D,:));
[L2Ea DsrZ] = yLaG(SJTW,HYIm,VfDr,urTY(H19D,:));
else
[y8t4 KVqX] = PrW_(lz5o,4,wKCd(H19D,:));
[L2Ea DsrZ] = yLaG(KVqX,y8t4,11,urTY(H19D,:));
end
for v3Rx = 1:2
if H19D == 2 && v3Rx == 2 && lYto > 2100, return, end
ySOz = bAMj(lz5o,DsrZ,L2Ea,e7g9,VfDr,cVj7(v3Rx,:))-1;
vclZ = SdUN(B,ySOz);
if vclZ <= lYto
lYto = vclZ;
W = ySOz;
e7g9 = e7g9 - 1;
end
end
end
if WWGB*Flut > 290; return; end
BtCk = sum(W(:,1)==W(:,3)&W(:,2)==W(:,4));
if BtCk <= 4
WO5t = IEGG(B);
tjBo = SdUN(B,WO5t);
if tjBo < lYto
W = WO5t;
lYto = tjBo;
end
end
end
function path = GrJm(B,RqaD,PyGh,w3f6,VfDr,zuBO)
function path = zE_f(TJj2,ZgCE,M8fb)
Q_ax(TJj2,ZgCE) = pt_l(MsWS);
EZkQ(TJj2,ZgCE) = dYuX(MsWS);
path = zeros(M8fb,4);
for Vmes = 1:M8fb
path(Vmes,1:2) = [TJj2 ZgCE];
aLdH = Q_ax(TJj2,ZgCE);
i1j3 = EZkQ(TJj2,ZgCE);
path(Vmes,3:4) = [aLdH i1j3];
TJj2 = aLdH;
ZgCE = i1j3;
end
end
[LgSP xKPD] = size(B);
Q_ax = zeros(LgSP,xKPD);
EZkQ = zeros(LgSP,xKPD);
dBmm = -ones(LgSP,xKPD);
dBmm(RqaD(2),PyGh(2)) = 0;
dBmm(RqaD(1),PyGh(1)) = -2;
dBmm( B == w3f6 ) = -2;
WECR = zeros(LgSP*xKPD,1);
nvvf = zeros(LgSP*xKPD,1);
count = 1;
WECR(1) = RqaD(2);
nvvf(1) = PyGh(2);
nJqe=[-1 1 0 0];
dMQz=[0 0 -1 1];
for step = 0:min(VfDr,zuBO)
if count < 1, break, end
u0Sg = count;
pt_l = WECR(1:u0Sg);
dYuX = nvvf(1:u0Sg);
count = 0;
for MsWS = 1:u0Sg
OSDf = dYuX(MsWS);
JWrY = pt_l(MsWS);
for ljIJ=1:4
TJj2 = JWrY + nJqe(ljIJ);
ZgCE = OSDf + dMQz(ljIJ);
eKnv = TJj2 + (ZgCE-1)*LgSP;
tKi8 = dBmm(eKnv);
if tKi8 == -2
path = zE_f(TJj2,ZgCE,step+1);
return
elseif tKi8 == -1 && B(eKnv) == 0
dBmm(eKnv) = step+1;
Q_ax(eKnv) = JWrY;
EZkQ(eKnv) = OSDf;
count = count + 1; WECR(count) = TJj2; nvvf(count) = ZgCE;
end
end
end
end
path = [];
end
function ZYL1 = IEGG(ih7P)
NnD0 = unique(ih7P);
NnD0(1) = [];
Psxi = zeros(size(NnD0));
for MsWS = 1:length(Psxi)
Psxi(MsWS) = nnz(NnD0(MsWS) == ih7P(:));
end
for MsWS = 1:length(Psxi)
if Psxi(MsWS) == 1
ih7P(NnD0(MsWS) == ih7P(:)) = -1;
end
end
TwiD = zeros(size(ih7P)+2);
RHBR = repmat(-1,size(TwiD));
RHBR(2:end-1,2:end-1) = ih7P;
ZYL1 = [];
[q2qS, vU9I] = find(RHBR>0);
l2Sp = (size(RHBR,1)/2 - q2qS).^2 + (size(RHBR,2)/2 - vU9I).^2;
[l2Sp, order] = sort(l2Sp);
order = order';
for nku6 = 1:length(q2qS)-1
ZTnM = 0;
oUi0 = 32;
for MsWS = order
if TwiD(q2qS(MsWS), vU9I(MsWS))
continue
end
[PA8B, g9BI, zVXZ] = oj2e(RHBR, TwiD, q2qS(MsWS), vU9I(MsWS), oUi0);
if PA8B > ZTnM
ZTnM = PA8B;
F0HP = g9BI;
oUi0 = zVXZ;
if oUi0 == 1
break
end
end
end
if ZTnM == 0
ZYL1 = ZYL1 - 1;
return
end
TwiD = DTy1(TwiD, F0HP, RHBR(F0HP(1,1), F0HP(1,2)));
RHBR = DTy1(RHBR, F0HP, RHBR(F0HP(1,1), F0HP(1,2)));
ZYL1 = [ZYL1; F0HP];
end
ZYL1 = ZYL1 - 1;
end
function [ZTnM, F0HP, oUi0] = oj2e(ih7P, TwiD, znnU, dYuX, TfWC)
ZTnM = 0;
F0HP = [];
Vmes = [1 -1 0 0];
nku6 = [0 0 1 -1];
if ~any(TwiD(:)==ih7P(znnU,dYuX))
TwiD = ih7P;
end
RHBR = ih7P;
RHBR(RHBR>0) = -1;
RHBR(znnU,dYuX) = 1;
oUi0 = Inf;
NnD0 = ih7P(znnU,dYuX);
for MsWS = 1:TfWC-2
[q2qS, vU9I] = find(RHBR==MsWS);
for Psxi = 1:length(q2qS)
for FpiL = 1:4
lIKz = q2qS(Psxi) + Vmes(FpiL);
m9C4 = vU9I(Psxi) + nku6(FpiL);
if TwiD(lIKz,m9C4) == NnD0 && ~(lIKz == znnU && m9C4 == dYuX)
oUi0 = MsWS;
break
end
meFv = RHBR(lIKz,m9C4);
if meFv == 0
RHBR(lIKz,m9C4) = MsWS+1;
end
end
if oUi0 < Inf
break
end
end
if oUi0 < Inf
break
end
end
if oUi0 == Inf
return
end
ZTnM = ih7P(znnU,dYuX) - oUi0;
if oUi0 == 1
F0HP = [znnU, dYuX, lIKz, m9C4];
return
end
F0HP = zeros(oUi0,4);
for step = oUi0:-1:1
for FpiL = 1:4
rZhw = lIKz + Vmes(FpiL);
vHoi = m9C4 + nku6(FpiL);
if RHBR(rZhw, vHoi) == step
break
end
end
F0HP(step,:) = [rZhw, vHoi, lIKz, m9C4];
lIKz = rZhw;
m9C4 = vHoi;
end
end
function [W B] = PrW_(B,VfDr,AhlV)
W = [];
[c3EP nku6] = U2Lr(B,AhlV);
if nku6 < 1
return
end
c3EP=sortrows(c3EP,-AhlV);
for MsWS = 1:nku6
if c3EP(MsWS,2) >= 2
NnD0 = c3EP(MsWS,1);
[RqaD PyGh] = find(B == NnD0);
u0Sg = size(RqaD,1);
p70_ = u0Sg*(u0Sg-1)/2;
dist = zeros(p70_,3);
H19D = 0;
for BGmn = 1:u0Sg
for ih7P = (BGmn+1):u0Sg
H19D = H19D + 1;
dist(H19D,1) = BGmn;
dist(H19D,2) = ih7P;
dist(H19D,3) = abs(RqaD(BGmn)-RqaD(ih7P)) + abs(PyGh(BGmn)-PyGh(ih7P));
end
end
[l2Sp D7ma] = sort(dist(:,3));
dist = dist(D7ma,:);
yrvv = reshape(dist(:,1:2)',[],1);
k_Ti = 0;
gyN2 = 1;
aEAA = false(u0Sg,1);
for MsWS=1:u0Sg
jzYL = find( ~aEAA(yrvv(gyN2:end)) , 1 , 'first');
if isempty(jzYL)
break
end
BGmn = yrvv(jzYL);
Distance = abs(RqaD([1:BGmn-1,BGmn+1:end]')-RqaD(BGmn)) + abs(PyGh([1:BGmn-1,BGmn+1:end]')-PyGh(BGmn));
if max(Distance)>VfDr-1
break
end
path = qKDC(B,RqaD(BGmn),PyGh(BGmn),RqaD([1:BGmn-1,BGmn+1:end]'),PyGh([1:BGmn-1,BGmn+1:end]'), -NnD0, VfDr, 2*NnD0);
if size(path,1) > 0
W = [W; path];
B = DTy1(B,path,-NnD0);
k_Ti = 2;
break
end
end
if k_Ti < 2
continue
end
for Vmes = 3:u0Sg
[n3fL nRWZ] = find(B == -NnD0);
[RqaD PyGh] = find(B == NnD0);
[WWI2,yo1C] = meshgrid(RqaD,n3fL);
[PzP4,v6gt] = meshgrid(RqaD,n3fL);
Distance = abs(WWI2-yo1C) + abs(PzP4-v6gt);
if max(Distance(:))>VfDr-1
break
end
path = qKDC(B,n3fL,nRWZ,RqaD,PyGh, -NnD0, VfDr, 2*NnD0);
if size(path,1) > 0
W = [W; path];
B = DTy1(B,path,-NnD0);
gezb = true;
else
break
end
end
end
end
end
function [W B] = yLaG(B,W,UVdH,AhlV)
[c3EP nku6] = U2Lr(B,AhlV);
if nku6 < 1, return, end
c3EP=sortrows(c3EP,-AhlV);
for MsWS = 1:nku6
NnD0 = c3EP(MsWS,1);
IkcA = sum(B == -NnD0);
if IkcA == 0
if c3EP(MsWS,2) >= 2
[RqaD PyGh] = find(B == NnD0);
u0Sg = size(RqaD,1);
p70_ = u0Sg*(u0Sg-1)/2;
dist = zeros(p70_,3);
H19D = 0;
for BGmn = 1:u0Sg
for ih7P = (BGmn+1):u0Sg
H19D = H19D + 1;
dist(H19D,1) = BGmn;
dist(H19D,2) = ih7P;
dist(H19D,3) = abs(RqaD(BGmn)-RqaD(ih7P)) + abs(PyGh(BGmn)-PyGh(ih7P));
end
end
[l2Sp D7ma] = sort(dist(:,3));
dist = dist(D7ma,:);
maxstep = min(UVdH,2*NnD0+1);
gezb = false;
for H19D = 1:p70_
if dist(H19D,3) > maxstep+1
break
end
BGmn = dist(H19D,1);
ih7P = dist(H19D,2);
path = GrJm(B,[RqaD(BGmn); RqaD(ih7P)], [PyGh(BGmn); PyGh(ih7P)], -NnD0, UVdH, 2*NnD0);
if size(path,1) > 0
W = [W; path];
B = DTy1(B,path,-NnD0);
gezb = true;
break
end
end
if ~gezb
continue
end
end
end
[RqaD PyGh] = find(B == NnD0);
WUCc = size(RqaD,1);
maxstep = min(UVdH,NnD0+1);
for Vmes = 1:WUCc
[n3fL nRWZ] = find(B == -NnD0);
[RqaD PyGh] = find(B == NnD0);
gezb = false;
path = qKDC(B,n3fL,nRWZ,RqaD,PyGh, -NnD0, UVdH, NnD0);
if size(path,1) > 0
W = [W; path];
B = DTy1(B,path,-NnD0);
gezb = true;
end
if ~gezb
break
end
end
end
end
function [W B] = bAMj(FGOi,B,W,e7g9,UVdH,AhlV)
function nne8()
for ZYL1 = 1:size(path,1);
if path(ZYL1,1) == path(ZYL1,3)
u1L3(path(ZYL1,1),path(ZYL1,2)) = false;
u1L3(path(ZYL1,3),path(ZYL1,4)) = false;
if path(ZYL1,2) == path(ZYL1,4)
B(path(ZYL1,1),path(ZYL1,2)) = -9999;
end
end
if path(ZYL1,2) == path(ZYL1,4)
jrUw(path(ZYL1,1),path(ZYL1,2)) = false;
jrUw(path(ZYL1,3),path(ZYL1,4)) = false;
end
end
end
[u1L3 jrUw] = B_qU(FGOi,B,W);
[c3EP nku6] = U2Lr(B,AhlV);
if nku6 < 1, return, end
c3EP=sortrows(c3EP,-AhlV);
for MsWS = 1:nku6
NnD0 = c3EP(MsWS,1);
IkcA = sum(B == -NnD0);
if IkcA == 0
if c3EP(MsWS,2) >= 2
[RqaD PyGh] = find(B == NnD0);
u0Sg = size(RqaD,1);
p70_ = u0Sg*(u0Sg-1)/2;
dist = zeros(p70_,3);
H19D = 0;
for BGmn = 1:u0Sg
for ih7P = (BGmn+1):u0Sg
H19D = H19D + 1;
dist(H19D,1) = BGmn;
dist(H19D,2) = ih7P;
dist(H19D,3) = abs(RqaD(BGmn)-RqaD(ih7P)) + abs(PyGh(BGmn)-PyGh(ih7P));
end
end
[l2Sp D7ma] = sort(dist(:,3));
dist = dist(D7ma,:);
maxstep = min((e7g9*25)+UVdH,2*NnD0+1);
gezb = false;
for H19D = 1:p70_
if dist(H19D,3) > maxstep+1
break
end
BGmn = dist(H19D,1);
ih7P = dist(H19D,2);
path = U3aA(B,u1L3,jrUw,[RqaD(BGmn); RqaD(ih7P)], [PyGh(BGmn); PyGh(ih7P)], -NnD0, e7g9, UVdH, 2*NnD0);
if size(path,1) > 0
W = [W; path];
B = DTy1(B,path,-NnD0);
nne8();
gezb = true;
break
end
end
if ~gezb
continue
end
end
end
[RqaD PyGh] = find(B == NnD0);
WUCc = size(RqaD,1);
maxstep = min((e7g9*25)+UVdH,NnD0+1);
for Vmes = 1:WUCc
[n3fL nRWZ] = find(B == -NnD0);
[RqaD PyGh] = find(B == NnD0);
gezb = false;
path = Rrnd(B,u1L3,jrUw,n3fL,nRWZ,RqaD,PyGh, -NnD0, e7g9, UVdH, NnD0);
if size(path,1) > 0
W = [W; path];
B = DTy1(B,path,-NnD0);
nne8();
gezb = true;
end
if ~gezb
break
end
end
end
end
function path = Rrnd(B,JEiY,wYjC,rowS,colS,bd8P,PSt9,w3f6,e7g9,vphg,zuBO)
function path = MwwU(eKnv,step)
iy4v(eKnv) = JWrY;
path = zeros(step,4);
KdkH = 0;
xzHV = 0;
Mw_t = zeros(step,1);
lzJR = zeros(step,1);
BM1F = zeros(step,1);
while isempty(find(e24b==eKnv,1))
KdkH = KdkH + 1;
Mw_t(KdkH,1) = eKnv;
SH0Z = iy4v(eKnv);
lzJR(KdkH,1) = SH0Z;
eKnv = SH0Z;
if oqP_(eKnv)
xzHV = xzHV + 1;
BM1F(xzHV,1) = eKnv;
end
end
Mw_t = [ Mw_t(1:KdkH,:) ; BM1F(1:xzHV,1) ];
lzJR = [ lzJR(1:KdkH,:) ; BM1F(1:xzHV,1) ];
path = [ mod(Mw_t,LgSP) , ceil(Mw_t/LgSP) , mod(lzJR,LgSP) , ceil(lzJR/LgSP) ];
end
[LgSP xKPD] = size(B);
oqP_ = false(LgSP,xKPD);
iy4v = zeros(LgSP,xKPD);
dBmm = -ones(LgSP,xKPD);
e24b = rowS + (colS-1)*LgSP;
dBmm(e24b) = 0;
dBmm(bd8P + (PSt9-1)*LgSP) = -2;
maxstep = min((e7g9*25)+vphg,zuBO+1);
l_c1 = zeros(maxstep+26,1);
Bw_M = [-1 1];
for step = 0:maxstep
if step == 0
znnU = e24b;
elseif l_c1(step) == 0
continue
else
znnU = find(dBmm == step);
end
u0Sg = numel(znnU);
for MsWS = 1:u0Sg
JWrY = znnU(MsWS);
for XyGI = 1:2
eKnv = JWrY + Bw_M(XyGI) * LgSP;
tKi8 = dBmm(eKnv);
if tKi8 == -2
path = MwwU(eKnv,step+1);
return
elseif tKi8 == -1
if B(eKnv) == 0
dBmm(eKnv) = step+1; l_c1(step+1) = 1;
iy4v(eKnv) = JWrY;
elseif JEiY(eKnv)
dBmm(eKnv) = step+26; l_c1(step+26) = 1;
iy4v(eKnv) = JWrY;
oqP_(eKnv) = true;
end
end
end
for XyGI = 1:2
eKnv = JWrY + Bw_M(XyGI);
tKi8 = dBmm(eKnv);
if tKi8 == -2
path = MwwU(eKnv,step+1);
return
elseif tKi8 == -1
if B(eKnv) == 0
dBmm(eKnv) = step+1; l_c1(step+1) = 1;
iy4v(eKnv) = JWrY;
elseif wYjC(eKnv)
dBmm(eKnv) = step+26; l_c1(step+26) = 1;
iy4v(eKnv) = JWrY;
oqP_(eKnv) = true;
end
end
end
end
end
path = zeros(0,4);
end
function path = qKDC(B,rowS,colS,QxAT,lK1g,w3f6,VfDr,zuBO)
[LgSP xKPD] = size(B);
Q_ax = zeros(LgSP,xKPD);
EZkQ = zeros(LgSP,xKPD);
dBmm = -ones(LgSP,xKPD);
dBmm(rowS+(colS-1)*LgSP) = 0;
dBmm(QxAT+(lK1g-1)*LgSP) = -2;
Ctkt = zeros(LgSP*xKPD,1);
nvvf = zeros(LgSP*xKPD,1);
count = numel(rowS);
Ctkt(1:count) = rowS;
nvvf(1:count) = colS;
nJqe=[-1 1 0 0];
dMQz=[0 0 -1 1];
for step = 0:min(VfDr,zuBO)
if count < 1, break, end
u0Sg = count;
pt_l = Ctkt(1:u0Sg);
dYuX = nvvf(1:u0Sg);
count = 0;
for MsWS = 1:u0Sg
OSDf = dYuX(MsWS);
JWrY = pt_l(MsWS);
for ljIJ=1:4
TJj2 = JWrY + nJqe(ljIJ);
ZgCE = OSDf + dMQz(ljIJ);
eKnv = TJj2 + (ZgCE-1)*LgSP;
tKi8 = dBmm(eKnv);
if tKi8 == -2
M8fb=step+1;
Q_ax(TJj2,ZgCE) = pt_l(MsWS);
EZkQ(TJj2,ZgCE) = dYuX(MsWS);
path = zeros(M8fb,4);
for Vmes = 1:M8fb
path(Vmes,1:2) = [TJj2 ZgCE];
aLdH = Q_ax(TJj2,ZgCE);
i1j3 = EZkQ(TJj2,ZgCE);
path(Vmes,3:4) = [aLdH i1j3];
TJj2 = aLdH;
ZgCE = i1j3;
end
return
end
if tKi8 == -1 && B(eKnv) == 0
dBmm(eKnv) = step+1;
Q_ax(eKnv) = JWrY;
EZkQ(eKnv) = OSDf;
count = count + 1; Ctkt(count) = TJj2; nvvf(count) = ZgCE;
end
end
end
end
path = [];
end
|