function W = solv(B)
qOhj=4340;
XdBS = rand(43,1);
W=Ey9Z(B);
oUPT = NHDW(B,W);
[KiFk,gOVM] = size(B);
QgQH = B(KiFk:-1:1,:);
QgQH = QgQH.';
[TPhe,upV_] = OJdB(QgQH,[1 2],[1 2],4*KiFk*gOVM);
if oUPT > upV_
W = [KiFk-TPhe(:,2)+1 TPhe(:,1) KiFk-TPhe(:,4)+1 TPhe(:,3)];
oUPT=upV_;
end
XdPH=rand('state');
rand(qOhj,1);
if oUPT>1000
[TPhe,upV_] = OJdB(QgQH,[1 2],[1 2],4*KiFk*gOVM);
if oUPT > upV_
W = [KiFk-TPhe(:,2)+1 TPhe(:,1) KiFk-TPhe(:,4)+1 TPhe(:,3)];
oUPT=upV_;
end
end
rand('state',XdPH);
end
function [W,oUPT] = OJdB(b3Lo,N7Zw,OfTL,jdPP)
[Cn7N,oprr]=size(b3Lo);
idFf= -ones(Cn7N+2,oprr+2);
idFf(2:end-1,2:end-1)=b3Lo;
BuFG = idFf;
ZBr8 = 4;
if size(BuFG,2) > 20
rgsC = 4;
XRfS = 8;
lylm = 18;
else
rgsC = 3;
XRfS = 7;
lylm = 13;
end
oUPT = inf;
WbPj = [1 2;2 1];
nINQ = [1 3;3 1];
tsl1 = [3 2 1;1 2 3];
for oEpl = N7Zw
if oEpl == 2
[Nh2i SgMx] = by2A(BuFG,rgsC,WbPj(oEpl,:));
[xPvI hioQ] = fIMq(SgMx,Nh2i,XRfS,nINQ(oEpl,:));
[Ffau xaYm] = fIMq(hioQ,xPvI,lylm,nINQ(oEpl,:));
else
[Nh2i SgMx] = by2A(BuFG,4,WbPj(oEpl,:));
[Ffau xaYm] = fIMq(SgMx,Nh2i,11,nINQ(oEpl,:));
end
for mAmw = OfTL
AQvN = lvjc(BuFG,xaYm,Ffau,ZBr8,lylm,tsl1(mAmw,:))-1;
iGBH = NHDW(b3Lo,AQvN);
if iGBH <= oUPT
oUPT = iGBH;
W = AQvN;
ZBr8 = ZBr8 - 1;
end
end
end
end
function hyZf = NHDW(B,W)
Cn7N=size(B,1);
B(W(:,1)+(W(:,2)-1)*Cn7N)=0;
B(W(:,3)+(W(:,4)-1)*Cn7N)=0;
hyZf=sum(B(:))+size(W,1)+sum(W(:,1)==W(:,3)&W(:,2)==W(:,4))*24;
end
function [Jlvr P9uw] = hJy5(B,a7AS)
GauT = sort(B(B>0),'descend');
r7H4 = size(GauT,1);
if r7H4 < 1
Jlvr = [];
P9uw = 0;
return
end
zXxs=GauT(diff([0;GauT])~=0);
Jlvr = zeros(nnz(zXxs),3);
smvV=histc(GauT,zXxs(end:-1:1));
Jlvr(:,1)=zXxs;
Jlvr(:,2)=smvV(end:-1:1);
P9uw=nnz(zXxs);
if a7AS < 3, return, end
for aW_A = 1:P9uw
if Jlvr(aW_A,2) >= 2
YaoF = Jlvr(aW_A,1);
[l095 aomG] = find(B == YaoF);
PB6s = 0;
b8fo = size(l095,1);
PB6s=sum(abs(diff(l095))+abs(diff(aomG)));
Jlvr(aW_A,3) = Jlvr(aW_A,2)*YaoF - 0.85 * PB6s;
end
end
end
function [W B] = by2A(B,lylm,a7AS)
W = [];
[Jlvr P9uw] = hJy5(B,a7AS);
if P9uw < 1
return
end
Jlvr=sortrows(Jlvr,-a7AS);
for aW_A = 1:P9uw
if Jlvr(aW_A,2) >= 2
YaoF = Jlvr(aW_A,1);
[l095 aomG] = find(B == YaoF);
b8fo = size(l095,1);
CFOq = b8fo*(b8fo-1)/2;
dist = zeros(CFOq,3);
[nePG GWYE]=find(tril(ones(b8fo),-1));
dist(:,1)=GWYE;
dist(:,2)=nePG;
dist(:,3)=abs(aomG(nePG)-aomG(GWYE))+abs(l095(nePG)-l095(GWYE));
[PB6s b0lR] = sort(dist(:,3));
dist = dist(b0lR,:);
r7H4 = 0;
for oEpl = 1:CFOq
if dist(oEpl,3) > lylm+1
break
end
jT_5 = dist(oEpl,1);
tgaA = dist(oEpl,2);
path = plAZ(B,[l095(jT_5); l095(tgaA)], [aomG(jT_5); aomG(tgaA)], -YaoF, lylm, 2*YaoF);
if size(path,1) > 0
W = [W; path];
B = rv0U(B,path,-YaoF);
r7H4 = 2;
edit = [1:(jT_5-1) (jT_5+1):(tgaA-1) (tgaA+1):b8fo];
l095 = [l095(jT_5); l095(tgaA); l095(edit)];
aomG = [aomG(jT_5); aomG(tgaA); aomG(edit)];
break
else
end
end
if r7H4 < 2
continue
end
for nHyW = 3:b8fo
[pTUG u1fn] = find(B == -YaoF);
TM_d = size(pTUG,1);
CFOq = TM_d * (b8fo - r7H4);
TVYx = (1:TM_d*b8fo)';
tgaA=mod(TVYx-1,b8fo)+1;
jT_5=ceil(TVYx/b8fo);
f4Ft = (tgaA>r7H4);
jT_5 = jT_5(f4Ft);
tgaA = tgaA(f4Ft);
PB6s = abs(pTUG(jT_5)-l095(tgaA)) + abs(u1fn(jT_5)-aomG(tgaA));
dist = [jT_5,tgaA,PB6s];
[PB6s b0lR] = sort(dist(:,3));
dist = dist(b0lR,:);
BJmw = false(b8fo,1);
dBVV = false;
for oEpl = 1:CFOq
if dist(oEpl,3) > lylm+1
break
end
tgaA = dist(oEpl,2);
if BJmw(tgaA)
randperm(4);
continue
end
jT_5 = dist(oEpl,1);
path = plAZ(B,[pTUG(jT_5); l095(tgaA)], [u1fn(jT_5); aomG(tgaA)], -YaoF, lylm, YaoF);
BJmw(tgaA)=true;
if size(path,1) > 0
W = [W; path];
B = rv0U(B,path,-YaoF);
r7H4 = r7H4 + 1;
dBVV = true;
l095([nHyW tgaA]) = l095([tgaA nHyW]);
aomG([nHyW tgaA]) = aomG([tgaA nHyW]);
break
end
end
if ~dBVV
break
end
end
end
end
end
function [W B] = fIMq(B,W,Mzpd,a7AS)
[Jlvr P9uw] = hJy5(B,a7AS);
if P9uw < 1, return, end
Jlvr=sortrows(Jlvr,-a7AS);
for aW_A = 1:P9uw
YaoF = Jlvr(aW_A,1);
TM_d = sum(B == -YaoF);
if TM_d == 0
if Jlvr(aW_A,2) >= 2
[l095 aomG] = find(B == YaoF);
b8fo = size(l095,1);
CFOq = b8fo*(b8fo-1)*.5;
TVYx = (1:b8fo*b8fo)';
tgaA=mod(TVYx-1,b8fo)+1;
jT_5=ceil(TVYx/b8fo);
f4Ft = (jT_5<tgaA);
jT_5 = jT_5(f4Ft);
tgaA = tgaA(f4Ft);
PB6s = abs(l095(jT_5)-l095(tgaA)) + abs(aomG(jT_5)-aomG(tgaA));
dist = [jT_5,tgaA,PB6s];
[PB6s b0lR] = sort(dist(:,3));
dist = dist(b0lR,:);
maxstep = min(Mzpd,2*YaoF+1);
dBVV = false;
for oEpl = 1:CFOq
if dist(oEpl,3) > maxstep+1
break
end
jT_5 = dist(oEpl,1);
tgaA = dist(oEpl,2);
path = plAZ(B,[l095(jT_5); l095(tgaA)], [aomG(jT_5); aomG(tgaA)], -YaoF, Mzpd, 2*YaoF);
if size(path,1) > 0
W = [W; path];
B = rv0U(B,path,-YaoF);
dBVV = true;
break
end
end
if ~dBVV
continue
end
end
end
[l095 aomG] = find(B == YaoF);
XSaU = size(l095,1);
maxstep = min(Mzpd,YaoF+1);
for nHyW = 1:XSaU
[pTUG u1fn] = find(B == -YaoF);
TM_d = size(pTUG,1);
CFOq = TM_d * (XSaU-nHyW+1);
dist = zeros(CFOq,3);
oEpl = 0;
for jT_5 = 1:TM_d
for tgaA = nHyW:XSaU
oEpl = oEpl + 1;
dist(oEpl,1) = jT_5;
dist(oEpl,2) = tgaA;
dist(oEpl,3) = abs(pTUG(jT_5)-l095(tgaA)) + abs(u1fn(jT_5)-aomG(tgaA));
end
end
[PB6s b0lR] = sort(dist(:,3));
dist = dist(b0lR,:);
BJmw = false(XSaU,1);
dBVV = false;
for oEpl = 1:CFOq
if dist(oEpl,3) > maxstep+1
break
end
tgaA = dist(oEpl,2);
if BJmw(tgaA)
randperm(4);
continue
end
jT_5 = dist(oEpl,1);
path = plAZ(B,[pTUG(jT_5); l095(tgaA)], [u1fn(jT_5); aomG(tgaA)], -YaoF, Mzpd, 2*YaoF);
BJmw(tgaA)=true;
if size(path,1) > 0
W = [W; path];
B = rv0U(B,path,-YaoF);
dBVV = true;
l095([nHyW tgaA]) = l095([tgaA nHyW]);
aomG([nHyW tgaA]) = aomG([tgaA nHyW]);
break
end
end
if ~dBVV
break
end
end
end
end
function [TsQv DyHB] = d_dV(idFf,B,path)
[Q876 C9qi] = size(B);
TsQv = idFf == 0;
DyHB = TsQv;
TsQv(:,[1 C9qi]) = false;
DyHB([1 Q876],:) = false;
for aW_A = 1:size(path,1)
if path(aW_A,1) == path(aW_A,3)
TsQv(path(aW_A,1),path(aW_A,2)) = false;
TsQv(path(aW_A,3),path(aW_A,4)) = false;
end
if path(aW_A,2) == path(aW_A,4)
DyHB(path(aW_A,1),path(aW_A,2)) = false;
DyHB(path(aW_A,3),path(aW_A,4)) = false;
end
end
end
function B = rv0U(B,path,BmKF)
B(path(1,1),path(1,2)) = BmKF;
for aW_A = 1:size(path,1);
B(path(aW_A,3),path(aW_A,4)) = BmKF;
end
end
function path = MReL(h99t,V5yb,Q876,ez95)
path = zeros(ez95,4);
VDKZ = mod(h99t,Q876);
JyKu = ceil(h99t/Q876);
for nHyW = 1:ez95
path(nHyW,1:2) = [VDKZ JyKu];
h99t = V5yb(h99t);
VDKZ = mod(h99t,Q876);
JyKu = ceil(h99t/Q876);
path(nHyW,3:4) = [VDKZ JyKu];
end
end
function path = plAZ(B,l095,aomG,BmKF,lylm,fNlL)
[Q876 C9qi] = size(B);
V5yb = zeros(Q876,C9qi);
yqpg = -ones(Q876,C9qi);
yqpg(l095(2),aomG(2)) = 0;
yqpg(l095(1),aomG(1)) = -2;
yqpg( B == BmKF ) = -2;
Hzaa = zeros(Q876*C9qi,1);
Hzaa(1) = l095(2) + (aomG(2)-1)*Q876;
count = 1;
Bywu = [-1 1 -Q876 Q876];
UQIh = randperm(4);
for step = 0:min(lylm,fNlL)
if count < 1, break, end
b8fo = count;
h99t = Hzaa;
count = 0;
for aW_A = 1:b8fo
uePA = h99t(aW_A);
for z_sS=1:4
Q1Qa = uePA + Bywu(UQIh(z_sS));
xTVn = yqpg(Q1Qa);
if xTVn == -2
V5yb(Q1Qa) = uePA;
path = MReL(Q1Qa,V5yb,Q876,step+1);
return
end
if xTVn == -1 && B(Q1Qa) == 0
yqpg(Q1Qa) = step+1;
V5yb(Q1Qa) = uePA;
count = count + 1;
Hzaa(count) = Q1Qa;
end
end
end
end
path = [];
end
function path = wikP(B,TsQv,DyHB,l095,aomG,BmKF,ZBr8,Mzpd,fNlL)
[Q876 C9qi] = size(B);
Dxyg = false(Q876,C9qi);
V5yb = zeros(Q876,C9qi);
yqpg = -ones(Q876,C9qi);
yqpg(l095(1),aomG(1)) = -2;
yqpg( B == BmKF ) = -2;
maxstep = min((ZBr8*27)+Mzpd,fNlL+1);
qum6 = zeros(maxstep+28,1);
qum6(1) = l095(2) + (aomG(2)-1)*Q876;
Bywu = [-Q876 Q876 -1 1];
for step = 1:maxstep
while qum6(step)>0
uePA = qum6(step);
qum6(step)=yqpg(uePA);
for z_sS = 1:4
Q1Qa = uePA + Bywu(z_sS);
xTVn = yqpg(Q1Qa);
if xTVn==-1
if B(Q1Qa) == 0
yqpg(Q1Qa) = qum6(step+1);
qum6(step+1) = Q1Qa;
V5yb(Q1Qa) = uePA;
elseif (TsQv(Q1Qa)&&(z_sS<3)) || (DyHB(Q1Qa)&&(z_sS>2))
yqpg(Q1Qa) = qum6(step+26);
qum6(step+26) = Q1Qa;
V5yb(Q1Qa) = uePA;
Dxyg(Q1Qa) = true;
end
end
if xTVn==-2
step=step+1;
V5yb(Q1Qa) = uePA;
VDKZ=mod(Q1Qa,Q876);
JyKu=ceil(Q1Qa/Q876);
path = zeros(step,4);
nHyW = 0;
while VDKZ ~= l095(2) || JyKu ~= aomG(2)
nHyW = nHyW + 1;
path(nHyW,1:2) = [VDKZ JyKu];
Q1Qa = VDKZ + (JyKu-1)*Q876;
J4JP = V5yb(Q1Qa);
sAi5=mod(J4JP,Q876);
MD9B=ceil(J4JP/Q876);
path(nHyW,3:4) = [sAi5 MD9B];
VDKZ = sAi5;
JyKu = MD9B;
if Dxyg(VDKZ,JyKu)
nHyW = nHyW + 1;
path(nHyW,:) = [VDKZ JyKu VDKZ JyKu];
end
end
path = path(1:nHyW,:);
return
end
end
end
end
path = [];
end
function W = Ey9Z(B)
[W,oUPT] = tJEI(B);
t91N = 0;
TQkP = round(mod(B(:),2));
if oUPT < 2100
return
end
[bIWs,Wx5k] = size(B);
B = flipud(fliplr(B'));
[ZnDb,nWjJ] = tJEI(B);
if oUPT > nWjJ
W = [bIWs-ZnDb(:,2)+1 Wx5k-ZnDb(:,1)+1 bIWs-ZnDb(:,4)+1 Wx5k-ZnDb(:,3)+1];
end
if TQkP~=t91N; W = zeros(0,4); end
end
function [W,oUPT] = tJEI(B)
[Cn7N,oprr]=size(B);
xeE5=nan(Cn7N+2,oprr+2);
xeE5(2:end-1,2:end-1)=B;
BuFG = xeE5;
ZBr8 = 4;
if size(BuFG,2) > 20
rgsC = 4;
XRfS = 8;
lylm = 12;
else
rgsC = 3;
XRfS = 7;
lylm = 11;
end
oUPT = inf;
WbPj = [1 2;2 1];
nINQ = [1 3;3 1];
tsl1 = [3 2 1;1 2 3];
for oEpl = 1:2
if oEpl == 2
[Nh2i SgMx] = To_0(BuFG,rgsC,WbPj(oEpl,:));
[xPvI hioQ] = pSbo(SgMx,Nh2i,XRfS,nINQ(oEpl,:));
[Ffau xaYm] = pSbo(hioQ,xPvI,lylm,nINQ(oEpl,:));
else
[Nh2i SgMx] = To_0(BuFG,4,WbPj(oEpl,:));
[Ffau xaYm] = pSbo(SgMx,Nh2i,11,nINQ(oEpl,:));
end
for mAmw = 1:2
if oEpl == 2 && mAmw == 2 && oUPT > 2100, return, end
AQvN = lvjc(BuFG,xaYm,Ffau,ZBr8,lylm,tsl1(mAmw,:))-1;
iGBH = NHDW(B,AQvN);
if iGBH <= oUPT
oUPT = iGBH;
W = AQvN;
ZBr8 = ZBr8 - 1;
end
end
end
if Cn7N*oprr > 290; return; end
HH_u = sum(W(:,1)==W(:,3)&W(:,2)==W(:,4));
if HH_u <= 4
kO1d = W_74(B);
kcoy = NHDW(B,kO1d);
if kcoy < oUPT
W = kO1d;
oUPT = kcoy;
end
end
end
function path = kDrU(B,l095,aomG,BmKF,lylm,fNlL)
function path = iJbJ(qvC3,p1YV,GhgV)
rATa(qvC3,p1YV) = B0Vq(aW_A);
tS1f(qvC3,p1YV) = z2UZ(aW_A);
path = zeros(GhgV,4);
for ixZ2 = 1:GhgV
path(ixZ2,1:2) = [qvC3 p1YV];
XlWe = rATa(qvC3,p1YV);
aPHJ = tS1f(qvC3,p1YV);
path(ixZ2,3:4) = [XlWe aPHJ];
qvC3 = XlWe;
p1YV = aPHJ;
end
end
[Q876 C9qi] = size(B);
rATa = zeros(Q876,C9qi);
tS1f = zeros(Q876,C9qi);
yqpg = -ones(Q876,C9qi);
yqpg(l095(2),aomG(2)) = 0;
yqpg(l095(1),aomG(1)) = -2;
yqpg( B == BmKF ) = -2;
yZ4S = zeros(Q876*C9qi,1);
DoNU = zeros(Q876*C9qi,1);
count = 1;
yZ4S(1) = l095(2);
DoNU(1) = aomG(2);
oasJ=[-1 1 0 0];
In0O=[0 0 -1 1];
for step = 0:min(lylm,fNlL)
if count < 1, break, end
b8fo = count;
B0Vq = yZ4S(1:b8fo);
z2UZ = DoNU(1:b8fo);
count = 0;
for aW_A = 1:b8fo
ouTf = z2UZ(aW_A);
uePA = B0Vq(aW_A);
for z_sS=1:4
qvC3 = uePA + oasJ(z_sS);
p1YV = ouTf + In0O(z_sS);
Q1Qa = qvC3 + (p1YV-1)*Q876;
xTVn = yqpg(Q1Qa);
if xTVn == -2
path = iJbJ(qvC3,p1YV,step+1);
return
elseif xTVn == -1 && B(Q1Qa) == 0
yqpg(Q1Qa) = step+1;
rATa(Q1Qa) = uePA;
tS1f(Q1Qa) = ouTf;
count = count + 1; yZ4S(count) = qvC3; DoNU(count) = p1YV;
end
end
end
end
path = [];
end
function zW94 = W_74(tgaA)
YaoF = unique(tgaA);
YaoF(1) = [];
Frkp = zeros(size(YaoF));
for aW_A = 1:length(Frkp)
Frkp(aW_A) = nnz(YaoF(aW_A) == tgaA(:));
end
for aW_A = 1:length(Frkp)
if Frkp(aW_A) == 1
tgaA(YaoF(aW_A) == tgaA(:)) = -1;
end
end
AxHq = zeros(size(tgaA)+2);
bIm5 = repmat(-1,size(AxHq));
bIm5(2:end-1,2:end-1) = tgaA;
zW94 = [];
[mH3I, bpi2] = find(bIm5>0);
PB6s = (size(bIm5,1)/2 - mH3I).^2 + (size(bIm5,2)/2 - bpi2).^2;
[PB6s, order] = sort(PB6s);
order = order';
for P9uw = 1:length(mH3I)-1
Upzm = 0;
pcJZ = 32;
for aW_A = order
if AxHq(mH3I(aW_A), bpi2(aW_A))
continue
end
[hyZf, UOwo, rrib] = IQ3N(bIm5, AxHq, mH3I(aW_A), bpi2(aW_A), pcJZ);
if hyZf > Upzm
Upzm = hyZf;
tWjo = UOwo;
pcJZ = rrib;
if pcJZ == 1
break
end
end
end
if Upzm == 0
zW94 = zW94 - 1;
return
end
AxHq = rv0U(AxHq, tWjo, bIm5(tWjo(1,1), tWjo(1,2)));
bIm5 = rv0U(bIm5, tWjo, bIm5(tWjo(1,1), tWjo(1,2)));
zW94 = [zW94; tWjo];
end
zW94 = zW94 - 1;
end
function [Upzm, tWjo, pcJZ] = IQ3N(tgaA, AxHq, h99t, z2UZ, iFmh)
Upzm = 0;
tWjo = [];
ixZ2 = [1 -1 0 0];
P9uw = [0 0 1 -1];
if ~any(AxHq(:)==tgaA(h99t,z2UZ))
AxHq = tgaA;
end
bIm5 = tgaA;
bIm5(bIm5>0) = -1;
bIm5(h99t,z2UZ) = 1;
pcJZ = Inf;
YaoF = tgaA(h99t,z2UZ);
for aW_A = 1:iFmh-2
[mH3I, bpi2] = find(bIm5==aW_A);
for Frkp = 1:length(mH3I)
for kKOI = 1:4
VLsA = mH3I(Frkp) + ixZ2(kKOI);
pwua = bpi2(Frkp) + P9uw(kKOI);
if AxHq(VLsA,pwua) == YaoF && ~(VLsA == h99t && pwua == z2UZ)
pcJZ = aW_A;
break
end
Io0S = bIm5(VLsA,pwua);
if Io0S == 0
bIm5(VLsA,pwua) = aW_A+1;
end
end
if pcJZ < Inf
break
end
end
if pcJZ < Inf
break
end
end
if pcJZ == Inf
return
end
Upzm = tgaA(h99t,z2UZ) - pcJZ;
if pcJZ == 1
tWjo = [h99t, z2UZ, VLsA, pwua];
return
end
tWjo = zeros(pcJZ,4);
for step = pcJZ:-1:1
for kKOI = 1:4
T9_l = VLsA + ixZ2(kKOI);
cSgR = pwua + P9uw(kKOI);
if bIm5(T9_l, cSgR) == step
break
end
end
tWjo(step,:) = [T9_l, cSgR, VLsA, pwua];
VLsA = T9_l;
pwua = cSgR;
end
end
function [W B] = To_0(B,lylm,a7AS)
W = [];
[Jlvr P9uw] = hJy5(B,a7AS);
if P9uw < 1
return
end
Jlvr=sortrows(Jlvr,-a7AS);
for aW_A = 1:P9uw
if Jlvr(aW_A,2) >= 2
YaoF = Jlvr(aW_A,1);
[l095 aomG] = find(B == YaoF);
b8fo = size(l095,1);
CFOq = b8fo*(b8fo-1)/2;
dist = zeros(CFOq,3);
oEpl = 0;
for jT_5 = 1:b8fo
for tgaA = (jT_5+1):b8fo
oEpl = oEpl + 1;
dist(oEpl,1) = jT_5;
dist(oEpl,2) = tgaA;
dist(oEpl,3) = abs(l095(jT_5)-l095(tgaA)) + abs(aomG(jT_5)-aomG(tgaA));
end
end
[PB6s b0lR] = sort(dist(:,3));
dist = dist(b0lR,:);
pdMN = reshape(dist(:,1:2)',[],1);
r7H4 = 0;
lvni = 1;
sbfs = false(b8fo,1);
for aW_A=1:b8fo
HUyt = find( ~sbfs(pdMN(lvni:end)) , 1 , 'first');
if isempty(HUyt)
break
end
jT_5 = pdMN(HUyt);
Distance = abs(l095([1:jT_5-1,jT_5+1:end]')-l095(jT_5)) + abs(aomG([1:jT_5-1,jT_5+1:end]')-aomG(jT_5));
if max(Distance)>lylm-1
break
end
path = CiMI(B,l095(jT_5),aomG(jT_5),l095([1:jT_5-1,jT_5+1:end]'),aomG([1:jT_5-1,jT_5+1:end]'), -YaoF, lylm, 2*YaoF);
if size(path,1) > 0
W = [W; path];
B = rv0U(B,path,-YaoF);
r7H4 = 2;
break
end
end
if r7H4 < 2
continue
end
for ixZ2 = 3:b8fo
[pTUG u1fn] = find(B == -YaoF);
[l095 aomG] = find(B == YaoF);
[m9N2,shOf] = meshgrid(l095,pTUG);
[OcYs,kSzV] = meshgrid(l095,pTUG);
Distance = abs(m9N2-shOf) + abs(OcYs-kSzV);
if max(Distance(:))>lylm-1
break
end
path = CiMI(B,pTUG,u1fn,l095,aomG, -YaoF, lylm, 2*YaoF);
if size(path,1) > 0
W = [W; path];
B = rv0U(B,path,-YaoF);
dBVV = true;
else
break
end
end
end
end
end
function [W B] = pSbo(B,W,lbc9,a7AS)
[Jlvr P9uw] = hJy5(B,a7AS);
if P9uw < 1, return, end
Jlvr=sortrows(Jlvr,-a7AS);
for aW_A = 1:P9uw
YaoF = Jlvr(aW_A,1);
TM_d = sum(B == -YaoF);
if TM_d == 0
if Jlvr(aW_A,2) >= 2
[l095 aomG] = find(B == YaoF);
b8fo = size(l095,1);
CFOq = b8fo*(b8fo-1)/2;
dist = zeros(CFOq,3);
oEpl = 0;
for jT_5 = 1:b8fo
for tgaA = (jT_5+1):b8fo
oEpl = oEpl + 1;
dist(oEpl,1) = jT_5;
dist(oEpl,2) = tgaA;
dist(oEpl,3) = abs(l095(jT_5)-l095(tgaA)) + abs(aomG(jT_5)-aomG(tgaA));
end
end
[PB6s b0lR] = sort(dist(:,3));
dist = dist(b0lR,:);
maxstep = min(lbc9,2*YaoF+1);
dBVV = false;
for oEpl = 1:CFOq
if dist(oEpl,3) > maxstep+1
break
end
jT_5 = dist(oEpl,1);
tgaA = dist(oEpl,2);
path = kDrU(B,[l095(jT_5); l095(tgaA)], [aomG(jT_5); aomG(tgaA)], -YaoF, lbc9, 2*YaoF);
if size(path,1) > 0
W = [W; path];
B = rv0U(B,path,-YaoF);
dBVV = true;
break
end
end
if ~dBVV
continue
end
end
end
[l095 aomG] = find(B == YaoF);
TTrx = size(l095,1);
maxstep = min(lbc9,YaoF+1);
for ixZ2 = 1:TTrx
[pTUG u1fn] = find(B == -YaoF);
[l095 aomG] = find(B == YaoF);
dBVV = false;
path = CiMI(B,pTUG,u1fn,l095,aomG, -YaoF, lbc9, YaoF);
if size(path,1) > 0
W = [W; path];
B = rv0U(B,path,-YaoF);
dBVV = true;
end
if ~dBVV
break
end
end
end
end
function [W B] = lvjc(xeE5,B,W,ZBr8,lbc9,a7AS)
function Fpqs()
for zW94 = 1:size(path,1);
if path(zW94,1) == path(zW94,3)
VRTo(path(zW94,1),path(zW94,2)) = false;
VRTo(path(zW94,3),path(zW94,4)) = false;
if path(zW94,2) == path(zW94,4)
B(path(zW94,1),path(zW94,2)) = -9999;
end
end
if path(zW94,2) == path(zW94,4)
xq1Q(path(zW94,1),path(zW94,2)) = false;
xq1Q(path(zW94,3),path(zW94,4)) = false;
end
end
end
[VRTo xq1Q] = d_dV(xeE5,B,W);
[Jlvr P9uw] = hJy5(B,a7AS);
if P9uw < 1, return, end
Jlvr=sortrows(Jlvr,-a7AS);
for aW_A = 1:P9uw
YaoF = Jlvr(aW_A,1);
TM_d = sum(B == -YaoF);
if TM_d == 0
if Jlvr(aW_A,2) >= 2
[l095 aomG] = find(B == YaoF);
b8fo = size(l095,1);
CFOq = b8fo*(b8fo-1)/2;
dist = zeros(CFOq,3);
oEpl = 0;
for jT_5 = 1:b8fo
for tgaA = (jT_5+1):b8fo
oEpl = oEpl + 1;
dist(oEpl,1) = jT_5;
dist(oEpl,2) = tgaA;
dist(oEpl,3) = abs(l095(jT_5)-l095(tgaA)) + abs(aomG(jT_5)-aomG(tgaA));
end
end
[PB6s b0lR] = sort(dist(:,3));
dist = dist(b0lR,:);
maxstep = min((ZBr8*25)+lbc9,2*YaoF+1);
dBVV = false;
for oEpl = 1:CFOq
if dist(oEpl,3) > maxstep+1
break
end
jT_5 = dist(oEpl,1);
tgaA = dist(oEpl,2);
path = wikP(B,VRTo,xq1Q,[l095(jT_5); l095(tgaA)], [aomG(jT_5); aomG(tgaA)], -YaoF, ZBr8, lbc9, 2*YaoF);
if size(path,1) > 0
W = [W; path];
B = rv0U(B,path,-YaoF);
Fpqs();
dBVV = true;
break
end
end
if ~dBVV
continue
end
end
end
[l095 aomG] = find(B == YaoF);
TTrx = size(l095,1);
maxstep = min((ZBr8*25)+lbc9,YaoF+1);
for ixZ2 = 1:TTrx
[pTUG u1fn] = find(B == -YaoF);
[l095 aomG] = find(B == YaoF);
dBVV = false;
path = r_0h(B,VRTo,xq1Q,pTUG,u1fn,l095,aomG, -YaoF, ZBr8, lbc9, YaoF);
if size(path,1) > 0
W = [W; path];
B = rv0U(B,path,-YaoF);
Fpqs();
dBVV = true;
end
if ~dBVV
break
end
end
end
end
function path = r_0h(B,TsQv,DyHB,rowS,colS,ljXJ,oyzU,BmKF,ZBr8,Mzpd,fNlL)
function path = MReL(Q1Qa,step)
V5yb(Q1Qa) = uePA;
path = zeros(step,4);
nHyW = 0;
qW_7 = 0;
yXBo = zeros(step,1);
t8gC = zeros(step,1);
yjJx = zeros(step,1);
while isempty(find(utAr==Q1Qa,1))
nHyW = nHyW + 1;
yXBo(nHyW,1) = Q1Qa;
J4JP = V5yb(Q1Qa);
t8gC(nHyW,1) = J4JP;
Q1Qa = J4JP;
if Dxyg(Q1Qa)
qW_7 = qW_7 + 1;
yjJx(qW_7,1) = Q1Qa;
end
end
yXBo = [ yXBo(1:nHyW,:) ; yjJx(1:qW_7,1) ];
t8gC = [ t8gC(1:nHyW,:) ; yjJx(1:qW_7,1) ];
path = [ mod(yXBo,Q876) , ceil(yXBo/Q876) , mod(t8gC,Q876) , ceil(t8gC/Q876) ];
end
[Q876 C9qi] = size(B);
Dxyg = false(Q876,C9qi);
V5yb = zeros(Q876,C9qi);
yqpg = -ones(Q876,C9qi);
utAr = rowS + (colS-1)*Q876;
yqpg(utAr) = 0;
yqpg(ljXJ + (oyzU-1)*Q876) = -2;
maxstep = min((ZBr8*25)+Mzpd,fNlL+1);
osMe = zeros(maxstep+26,1);
ny5v = [-1 1];
for step = 0:maxstep
if step == 0
h99t = utAr;
elseif osMe(step) == 0
continue
else
h99t = find(yqpg == step);
end
b8fo = numel(h99t);
for aW_A = 1:b8fo
uePA = h99t(aW_A);
for nanZ = 1:2
Q1Qa = uePA + ny5v(nanZ) * Q876;
xTVn = yqpg(Q1Qa);
if xTVn == -2
path = MReL(Q1Qa,step+1);
return
elseif xTVn == -1
if B(Q1Qa) == 0
yqpg(Q1Qa) = step+1; osMe(step+1) = 1;
V5yb(Q1Qa) = uePA;
elseif TsQv(Q1Qa)
yqpg(Q1Qa) = step+26; osMe(step+26) = 1;
V5yb(Q1Qa) = uePA;
Dxyg(Q1Qa) = true;
end
end
end
for nanZ = 1:2
Q1Qa = uePA + ny5v(nanZ);
xTVn = yqpg(Q1Qa);
if xTVn == -2
path = MReL(Q1Qa,step+1);
return
elseif xTVn == -1
if B(Q1Qa) == 0
yqpg(Q1Qa) = step+1; osMe(step+1) = 1;
V5yb(Q1Qa) = uePA;
elseif DyHB(Q1Qa)
yqpg(Q1Qa) = step+26; osMe(step+26) = 1;
V5yb(Q1Qa) = uePA;
Dxyg(Q1Qa) = true;
end
end
end
end
end
path = zeros(0,4);
end
function path = CiMI(B,rowS,colS,qBfd,JdSq,BmKF,lylm,fNlL)
[Q876 C9qi] = size(B);
rATa = zeros(Q876,C9qi);
tS1f = zeros(Q876,C9qi);
yqpg = -ones(Q876,C9qi);
yqpg(rowS+(colS-1)*Q876) = 0;
yqpg(qBfd+(JdSq-1)*Q876) = -2;
Hzaa = zeros(Q876*C9qi,1);
DoNU = zeros(Q876*C9qi,1);
count = numel(rowS);
Hzaa(1:count) = rowS;
DoNU(1:count) = colS;
oasJ=[-1 1 0 0];
In0O=[0 0 -1 1];
for step = 0:min(lylm,fNlL)
if count < 1, break, end
b8fo = count;
B0Vq = Hzaa(1:b8fo);
z2UZ = DoNU(1:b8fo);
count = 0;
for aW_A = 1:b8fo
ouTf = z2UZ(aW_A);
uePA = B0Vq(aW_A);
for z_sS=1:4
qvC3 = uePA + oasJ(z_sS);
p1YV = ouTf + In0O(z_sS);
Q1Qa = qvC3 + (p1YV-1)*Q876;
xTVn = yqpg(Q1Qa);
if xTVn == -2
GhgV=step+1;
rATa(qvC3,p1YV) = B0Vq(aW_A);
tS1f(qvC3,p1YV) = z2UZ(aW_A);
path = zeros(GhgV,4);
for ixZ2 = 1:GhgV
path(ixZ2,1:2) = [qvC3 p1YV];
XlWe = rATa(qvC3,p1YV);
aPHJ = tS1f(qvC3,p1YV);
path(ixZ2,3:4) = [XlWe aPHJ];
qvC3 = XlWe;
p1YV = aPHJ;
end
return
end
if xTVn == -1 && B(Q1Qa) == 0
yqpg(Q1Qa) = step+1;
rATa(Q1Qa) = uePA;
tS1f(Q1Qa) = ouTf;
count = count + 1; Hzaa(count) = qvC3; DoNU(count) = p1YV;
end
end
end
end
path = [];
end
|