| Code: | function W = solv(B)
InJ8=4803;
Tw9T = rand(43,1);
W=QOOg(B);
xg96 = D2Fp(B,W);
[fxis,Lhv2] = size(B);
Ztrs = B(fxis:-1:1,:);
Ztrs = Ztrs.';
[WHaH,UZQd] = LVyg(Ztrs,[1 2],[1 2],4*fxis*Lhv2);
if xg96 > UZQd
W = [fxis-WHaH(:,2)+1 WHaH(:,1) fxis-WHaH(:,4)+1 WHaH(:,3)];
xg96=UZQd;
end
UJK1=rand('state');
rand(InJ8,1);
if xg96>1000
[WHaH,UZQd] = LVyg(Ztrs,[1 2],[1 2],4*fxis*Lhv2);
if xg96 > UZQd
W = [fxis-WHaH(:,2)+1 WHaH(:,1) fxis-WHaH(:,4)+1 WHaH(:,3)];
xg96=UZQd;
end
end
rand('state',UJK1);
end
function [W,xg96] = LVyg(RIcd,ab6D,cJal,q7GJ)
[n950,i75c]=size(RIcd);
HIEW= -ones(n950+2,i75c+2);
HIEW(2:end-1,2:end-1)=RIcd;
KcQI = HIEW;
hNo1 = 4;
if size(KcQI,2) > 20
IMA8 = 4;
ntB3 = 8;
UR9Z = 18;
else
IMA8 = 3;
ntB3 = 7;
UR9Z = 13;
end
xg96 = inf;
gYYS = [1 2;2 1];
Gc9L = [1 3;3 1];
JhGd = [3 2 1;1 2 3];
for o3eU = ab6D
if o3eU == 2
[x3Rw KrDu] = Y99n(KcQI,IMA8,gYYS(o3eU,:));
[Xgrp kBqv] = V_ym(KrDu,x3Rw,ntB3,Gc9L(o3eU,:));
[gMh2 rEGF] = V_ym(kBqv,Xgrp,UR9Z,Gc9L(o3eU,:));
else
[x3Rw KrDu] = Y99n(KcQI,4,gYYS(o3eU,:));
[gMh2 rEGF] = V_ym(KrDu,x3Rw,11,Gc9L(o3eU,:));
end
for gDYB = cJal
NdzX = D5VC(KcQI,rEGF,gMh2,hNo1,UR9Z,JhGd(gDYB,:))-1;
drFs = D2Fp(RIcd,NdzX);
if drFs <= xg96
xg96 = drFs;
W = NdzX;
hNo1 = hNo1 - 1;
end
end
end
end
function GoAu = D2Fp(B,W)
n950=size(B,1);
B(W(:,1)+(W(:,2)-1)*n950)=0;
B(W(:,3)+(W(:,4)-1)*n950)=0;
GoAu=sum(B(:))+size(W,1)+sum(W(:,1)==W(:,3)&W(:,2)==W(:,4))*24;
end
function [si5q s3Hh] = wP9J(B,vdcE)
z7XH = sort(B(B>0),'descend');
IsKD = size(z7XH,1);
if IsKD < 1
si5q = [];
s3Hh = 0;
return
end
ecWY=z7XH(diff([0;z7XH])~=0);
si5q = zeros(nnz(ecWY),3);
VVoA=histc(z7XH,ecWY(end:-1:1));
si5q(:,1)=ecWY;
si5q(:,2)=VVoA(end:-1:1);
s3Hh=nnz(ecWY);
if vdcE < 3, return, end
for vgxb = 1:s3Hh
if si5q(vgxb,2) >= 2
P_VQ = si5q(vgxb,1);
[mcFT g44R] = find(B == P_VQ);
rIUr = 0;
jt35 = size(mcFT,1);
rIUr=sum(abs(diff(mcFT))+abs(diff(g44R)));
si5q(vgxb,3) = si5q(vgxb,2)*P_VQ - 0.85 * rIUr;
end
end
end
function [W B] = Y99n(B,UR9Z,vdcE)
W = [];
[si5q s3Hh] = wP9J(B,vdcE);
if s3Hh < 1
return
end
si5q=sortrows(si5q,-vdcE);
for vgxb = 1:s3Hh
if si5q(vgxb,2) >= 2
P_VQ = si5q(vgxb,1);
[mcFT g44R] = find(B == P_VQ);
jt35 = size(mcFT,1);
h3rO = jt35*(jt35-1)/2;
dist = zeros(h3rO,3);
[tLf6 KUdA]=find(tril(ones(jt35),-1));
dist(:,1)=KUdA;
dist(:,2)=tLf6;
dist(:,3)=abs(g44R(tLf6)-g44R(KUdA))+abs(mcFT(tLf6)-mcFT(KUdA));
[rIUr Xi7M] = sort(dist(:,3));
dist = dist(Xi7M,:);
IsKD = 0;
for o3eU = 1:h3rO
if dist(o3eU,3) > UR9Z+1
break
end
LVgO = dist(o3eU,1);
JVTI = dist(o3eU,2);
path = cIoS(B,[mcFT(LVgO); mcFT(JVTI)], [g44R(LVgO); g44R(JVTI)], -P_VQ, UR9Z, 2*P_VQ);
if size(path,1) > 0
W = [W; path];
B = LBM5(B,path,-P_VQ);
IsKD = 2;
edit = [1:(LVgO-1) (LVgO+1):(JVTI-1) (JVTI+1):jt35];
mcFT = [mcFT(LVgO); mcFT(JVTI); mcFT(edit)];
g44R = [g44R(LVgO); g44R(JVTI); g44R(edit)];
break
else
end
end
if IsKD < 2
continue
end
for AHK1 = 3:jt35
[eS_a sDY_] = find(B == -P_VQ);
qbti = size(eS_a,1);
h3rO = qbti * (jt35 - IsKD);
UsNA = (1:qbti*jt35)';
JVTI=mod(UsNA-1,jt35)+1;
LVgO=ceil(UsNA/jt35);
yIfl = (JVTI>IsKD);
LVgO = LVgO(yIfl);
JVTI = JVTI(yIfl);
rIUr = abs(eS_a(LVgO)-mcFT(JVTI)) + abs(sDY_(LVgO)-g44R(JVTI));
dist = [LVgO,JVTI,rIUr];
[rIUr Xi7M] = sort(dist(:,3));
dist = dist(Xi7M,:);
ZLR3 = false(jt35,1);
Uwxi = false;
for o3eU = 1:h3rO
if dist(o3eU,3) > UR9Z+1
break
end
JVTI = dist(o3eU,2);
if ZLR3(JVTI)
randperm(4);
continue
end
LVgO = dist(o3eU,1);
path = cIoS(B,[eS_a(LVgO); mcFT(JVTI)], [sDY_(LVgO); g44R(JVTI)], -P_VQ, UR9Z, P_VQ);
ZLR3(JVTI)=true;
if size(path,1) > 0
W = [W; path];
B = LBM5(B,path,-P_VQ);
IsKD = IsKD + 1;
Uwxi = true;
mcFT([AHK1 JVTI]) = mcFT([JVTI AHK1]);
g44R([AHK1 JVTI]) = g44R([JVTI AHK1]);
break
end
end
if ~Uwxi
break
end
end
end
end
end
function [W B] = V_ym(B,W,dDh9,vdcE)
[si5q s3Hh] = wP9J(B,vdcE);
if s3Hh < 1, return, end
si5q=sortrows(si5q,-vdcE);
for vgxb = 1:s3Hh
P_VQ = si5q(vgxb,1);
qbti = sum(B == -P_VQ);
if qbti == 0
if si5q(vgxb,2) >= 2
[mcFT g44R] = find(B == P_VQ);
jt35 = size(mcFT,1);
h3rO = jt35*(jt35-1)*.5;
UsNA = (1:jt35*jt35)';
JVTI=mod(UsNA-1,jt35)+1;
LVgO=ceil(UsNA/jt35);
yIfl = (LVgO<JVTI);
LVgO = LVgO(yIfl);
JVTI = JVTI(yIfl);
rIUr = abs(mcFT(LVgO)-mcFT(JVTI)) + abs(g44R(LVgO)-g44R(JVTI));
dist = [LVgO,JVTI,rIUr];
[rIUr Xi7M] = sort(dist(:,3));
dist = dist(Xi7M,:);
maxstep = min(dDh9,2*P_VQ+1);
Uwxi = false;
for o3eU = 1:h3rO
if dist(o3eU,3) > maxstep+1
break
end
LVgO = dist(o3eU,1);
JVTI = dist(o3eU,2);
path = cIoS(B,[mcFT(LVgO); mcFT(JVTI)], [g44R(LVgO); g44R(JVTI)], -P_VQ, dDh9, 2*P_VQ);
if size(path,1) > 0
W = [W; path];
B = LBM5(B,path,-P_VQ);
Uwxi = true;
break
end
end
if ~Uwxi
continue
end
end
end
[mcFT g44R] = find(B == P_VQ);
IRrC = size(mcFT,1);
maxstep = min(dDh9,P_VQ+1);
for AHK1 = 1:IRrC
[eS_a sDY_] = find(B == -P_VQ);
qbti = size(eS_a,1);
h3rO = qbti * (IRrC-AHK1+1);
dist = zeros(h3rO,3);
o3eU = 0;
for LVgO = 1:qbti
for JVTI = AHK1:IRrC
o3eU = o3eU + 1;
dist(o3eU,1) = LVgO;
dist(o3eU,2) = JVTI;
dist(o3eU,3) = abs(eS_a(LVgO)-mcFT(JVTI)) + abs(sDY_(LVgO)-g44R(JVTI));
end
end
[rIUr Xi7M] = sort(dist(:,3));
dist = dist(Xi7M,:);
ZLR3 = false(IRrC,1);
Uwxi = false;
for o3eU = 1:h3rO
if dist(o3eU,3) > maxstep+1
break
end
JVTI = dist(o3eU,2);
if ZLR3(JVTI)
randperm(4);
continue
end
LVgO = dist(o3eU,1);
path = cIoS(B,[eS_a(LVgO); mcFT(JVTI)], [sDY_(LVgO); g44R(JVTI)], -P_VQ, dDh9, 2*P_VQ);
ZLR3(JVTI)=true;
if size(path,1) > 0
W = [W; path];
B = LBM5(B,path,-P_VQ);
Uwxi = true;
mcFT([AHK1 JVTI]) = mcFT([JVTI AHK1]);
g44R([AHK1 JVTI]) = g44R([JVTI AHK1]);
break
end
end
if ~Uwxi
break
end
end
end
end
function [YCdt P41f] = GtZG(HIEW,B,path)
[QHFY LwZG] = size(B);
YCdt = HIEW == 0;
P41f = YCdt;
YCdt(:,[1 LwZG]) = false;
P41f([1 QHFY],:) = false;
for vgxb = 1:size(path,1)
if path(vgxb,1) == path(vgxb,3)
YCdt(path(vgxb,1),path(vgxb,2)) = false;
YCdt(path(vgxb,3),path(vgxb,4)) = false;
end
if path(vgxb,2) == path(vgxb,4)
P41f(path(vgxb,1),path(vgxb,2)) = false;
P41f(path(vgxb,3),path(vgxb,4)) = false;
end
end
end
function B = LBM5(B,path,a4oA)
B(path(1,1),path(1,2)) = a4oA;
for vgxb = 1:size(path,1);
B(path(vgxb,3),path(vgxb,4)) = a4oA;
end
end
function path = hh3d(nqs5,PRo0,QHFY,ehvZ)
path = zeros(ehvZ,4);
h1mq = mod(nqs5,QHFY);
ACEO = ceil(nqs5/QHFY);
for AHK1 = 1:ehvZ
path(AHK1,1:2) = [h1mq ACEO];
nqs5 = PRo0(nqs5);
h1mq = mod(nqs5,QHFY);
ACEO = ceil(nqs5/QHFY);
path(AHK1,3:4) = [h1mq ACEO];
end
end
function path = cIoS(B,mcFT,g44R,a4oA,UR9Z,XaZW)
[QHFY LwZG] = size(B);
PRo0 = zeros(QHFY,LwZG);
k_AX = -ones(QHFY,LwZG);
k_AX(mcFT(2),g44R(2)) = 0;
k_AX(mcFT(1),g44R(1)) = -2;
k_AX( B == a4oA ) = -2;
IbqY = zeros(QHFY*LwZG,1);
IbqY(1) = mcFT(2) + (g44R(2)-1)*QHFY;
count = 1;
GMlZ = [-1 1 -QHFY QHFY];
EYkG = randperm(4);
for step = 0:min(UR9Z,XaZW)
if count < 1, break, end
jt35 = count;
nqs5 = IbqY;
count = 0;
for vgxb = 1:jt35
pIup = nqs5(vgxb);
for VIwz=1:4
grc8 = pIup + GMlZ(EYkG(VIwz));
lguM = k_AX(grc8);
if lguM == -2
PRo0(grc8) = pIup;
path = hh3d(grc8,PRo0,QHFY,step+1);
return
end
if lguM == -1 && B(grc8) == 0
k_AX(grc8) = step+1;
PRo0(grc8) = pIup;
count = count + 1;
IbqY(count) = grc8;
end
end
end
end
path = [];
end
function path = Rqjn(B,YCdt,P41f,mcFT,g44R,a4oA,hNo1,dDh9,XaZW)
[QHFY LwZG] = size(B);
jCGx = false(QHFY,LwZG);
PRo0 = zeros(QHFY,LwZG);
k_AX = -ones(QHFY,LwZG);
k_AX(mcFT(1),g44R(1)) = -2;
k_AX( B == a4oA ) = -2;
maxstep = min((hNo1*27)+dDh9,XaZW+1);
prQa = zeros(maxstep+28,1);
prQa(1) = mcFT(2) + (g44R(2)-1)*QHFY;
GMlZ = [-QHFY QHFY -1 1];
for step = 1:maxstep
while prQa(step)>0
pIup = prQa(step);
prQa(step)=k_AX(pIup);
for VIwz = 1:4
grc8 = pIup + GMlZ(VIwz);
lguM = k_AX(grc8);
if lguM==-1
if B(grc8) == 0
k_AX(grc8) = prQa(step+1);
prQa(step+1) = grc8;
PRo0(grc8) = pIup;
elseif (YCdt(grc8)&&(VIwz<3)) || (P41f(grc8)&&(VIwz>2))
k_AX(grc8) = prQa(step+26);
prQa(step+26) = grc8;
PRo0(grc8) = pIup;
jCGx(grc8) = true;
end
end
if lguM==-2
step=step+1;
PRo0(grc8) = pIup;
h1mq=mod(grc8,QHFY);
ACEO=ceil(grc8/QHFY);
path = zeros(step,4);
AHK1 = 0;
while h1mq ~= mcFT(2) || ACEO ~= g44R(2)
AHK1 = AHK1 + 1;
path(AHK1,1:2) = [h1mq ACEO];
grc8 = h1mq + (ACEO-1)*QHFY;
oiEX = PRo0(grc8);
IGVx=mod(oiEX,QHFY);
Umm2=ceil(oiEX/QHFY);
path(AHK1,3:4) = [IGVx Umm2];
h1mq = IGVx;
ACEO = Umm2;
if jCGx(h1mq,ACEO)
AHK1 = AHK1 + 1;
path(AHK1,:) = [h1mq ACEO h1mq ACEO];
end
end
path = path(1:AHK1,:);
return
end
end
end
end
path = [];
end
function W = QOOg(B)
[W,xg96] = euAb(B);
yHjt = 0;
TgTD = round(mod(B(:),2));
if xg96 < 2100
return
end
[enNg,DafR] = size(B);
B = flipud(fliplr(B'));
[zxJc,VK6i] = euAb(B);
if xg96 > VK6i
W = [enNg-zxJc(:,2)+1 DafR-zxJc(:,1)+1 enNg-zxJc(:,4)+1 DafR-zxJc(:,3)+1];
end
if TgTD~=yHjt; W = zeros(0,4); end
end
function [W,xg96] = euAb(B)
[n950,i75c]=size(B);
dS43=nan(n950+2,i75c+2);
dS43(2:end-1,2:end-1)=B;
KcQI = dS43;
hNo1 = 4;
if size(KcQI,2) > 20
IMA8 = 4;
ntB3 = 8;
UR9Z = 12;
else
IMA8 = 3;
ntB3 = 7;
UR9Z = 11;
end
xg96 = inf;
gYYS = [1 2;2 1];
Gc9L = [1 3;3 1];
JhGd = [3 2 1;1 2 3];
for o3eU = 1:2
if o3eU == 2
[x3Rw KrDu] = b_ip(KcQI,IMA8,gYYS(o3eU,:));
[Xgrp kBqv] = PwCH(KrDu,x3Rw,ntB3,Gc9L(o3eU,:));
[gMh2 rEGF] = PwCH(kBqv,Xgrp,UR9Z,Gc9L(o3eU,:));
else
[x3Rw KrDu] = b_ip(KcQI,4,gYYS(o3eU,:));
[gMh2 rEGF] = PwCH(KrDu,x3Rw,11,Gc9L(o3eU,:));
end
for gDYB = 1:2
if o3eU == 2 && gDYB == 2 && xg96 > 2100, return, end
NdzX = D5VC(KcQI,rEGF,gMh2,hNo1,UR9Z,JhGd(gDYB,:))-1;
drFs = D2Fp(B,NdzX);
if drFs <= xg96
xg96 = drFs;
W = NdzX;
hNo1 = hNo1 - 1;
end
end
end
if n950*i75c > 290; return; end
kQeZ = sum(W(:,1)==W(:,3)&W(:,2)==W(:,4));
if kQeZ <= 4
M0ff = A0PR(B);
OmRN = D2Fp(B,M0ff);
if OmRN < xg96
W = M0ff;
xg96 = OmRN;
end
end
end
function path = ffzy(B,mcFT,g44R,a4oA,UR9Z,XaZW)
function path = TQe_(ORB_,fCS2,CCRs)
DUm_(ORB_,fCS2) = mcFL(vgxb);
bieJ(ORB_,fCS2) = BS3b(vgxb);
path = zeros(CCRs,4);
for p6y8 = 1:CCRs
path(p6y8,1:2) = [ORB_ fCS2];
khtQ = DUm_(ORB_,fCS2);
S912 = bieJ(ORB_,fCS2);
path(p6y8,3:4) = [khtQ S912];
ORB_ = khtQ;
fCS2 = S912;
end
end
[QHFY LwZG] = size(B);
DUm_ = zeros(QHFY,LwZG);
bieJ = zeros(QHFY,LwZG);
k_AX = -ones(QHFY,LwZG);
k_AX(mcFT(2),g44R(2)) = 0;
k_AX(mcFT(1),g44R(1)) = -2;
k_AX( B == a4oA ) = -2;
tNoe = zeros(QHFY*LwZG,1);
tY36 = zeros(QHFY*LwZG,1);
count = 1;
tNoe(1) = mcFT(2);
tY36(1) = g44R(2);
m8k9=[-1 1 0 0];
z2EA=[0 0 -1 1];
for step = 0:min(UR9Z,XaZW)
if count < 1, break, end
jt35 = count;
mcFL = tNoe(1:jt35);
BS3b = tY36(1:jt35);
count = 0;
for vgxb = 1:jt35
Itok = BS3b(vgxb);
pIup = mcFL(vgxb);
for VIwz=1:4
ORB_ = pIup + m8k9(VIwz);
fCS2 = Itok + z2EA(VIwz);
grc8 = ORB_ + (fCS2-1)*QHFY;
lguM = k_AX(grc8);
if lguM == -2
path = TQe_(ORB_,fCS2,step+1);
return
elseif lguM == -1 && B(grc8) == 0
k_AX(grc8) = step+1;
DUm_(grc8) = pIup;
bieJ(grc8) = Itok;
count = count + 1; tNoe(count) = ORB_; tY36(count) = fCS2;
end
end
end
end
path = [];
end
function byv1 = A0PR(JVTI)
P_VQ = unique(JVTI);
P_VQ(1) = [];
mRcH = zeros(size(P_VQ));
for vgxb = 1:length(mRcH)
mRcH(vgxb) = nnz(P_VQ(vgxb) == JVTI(:));
end
for vgxb = 1:length(mRcH)
if mRcH(vgxb) == 1
JVTI(P_VQ(vgxb) == JVTI(:)) = -1;
end
end
HuwX = zeros(size(JVTI)+2);
qLN9 = repmat(-1,size(HuwX));
qLN9(2:end-1,2:end-1) = JVTI;
byv1 = [];
[pTJ_, HgOf] = find(qLN9>0);
rIUr = (size(qLN9,1)/2 - pTJ_).^2 + (size(qLN9,2)/2 - HgOf).^2;
[rIUr, order] = sort(rIUr);
order = order';
for s3Hh = 1:length(pTJ_)-1
rdVR = 0;
AaPI = 32;
for vgxb = order
if HuwX(pTJ_(vgxb), HgOf(vgxb))
continue
end
[GoAu, NAlo, zbFn] = Ukie(qLN9, HuwX, pTJ_(vgxb), HgOf(vgxb), AaPI);
if GoAu > rdVR
rdVR = GoAu;
Vd6G = NAlo;
AaPI = zbFn;
if AaPI == 1
break
end
end
end
if rdVR == 0
byv1 = byv1 - 1;
return
end
HuwX = LBM5(HuwX, Vd6G, qLN9(Vd6G(1,1), Vd6G(1,2)));
qLN9 = LBM5(qLN9, Vd6G, qLN9(Vd6G(1,1), Vd6G(1,2)));
byv1 = [byv1; Vd6G];
end
byv1 = byv1 - 1;
end
function [rdVR, Vd6G, AaPI] = Ukie(JVTI, HuwX, nqs5, BS3b, bfNl)
rdVR = 0;
Vd6G = [];
p6y8 = [1 -1 0 0];
s3Hh = [0 0 1 -1];
if ~any(HuwX(:)==JVTI(nqs5,BS3b))
HuwX = JVTI;
end
qLN9 = JVTI;
qLN9(qLN9>0) = -1;
qLN9(nqs5,BS3b) = 1;
AaPI = Inf;
P_VQ = JVTI(nqs5,BS3b);
for vgxb = 1:bfNl-2
[pTJ_, HgOf] = find(qLN9==vgxb);
for mRcH = 1:length(pTJ_)
for Fk_I = 1:4
eFsf = pTJ_(mRcH) + p6y8(Fk_I);
kw7i = HgOf(mRcH) + s3Hh(Fk_I);
if HuwX(eFsf,kw7i) == P_VQ && ~(eFsf == nqs5 && kw7i == BS3b)
AaPI = vgxb;
break
end
uBrQ = qLN9(eFsf,kw7i);
if uBrQ == 0
qLN9(eFsf,kw7i) = vgxb+1;
end
end
if AaPI < Inf
break
end
end
if AaPI < Inf
break
end
end
if AaPI == Inf
return
end
rdVR = JVTI(nqs5,BS3b) - AaPI;
if AaPI == 1
Vd6G = [nqs5, BS3b, eFsf, kw7i];
return
end
Vd6G = zeros(AaPI,4);
for step = AaPI:-1:1
for Fk_I = 1:4
KcoB = eFsf + p6y8(Fk_I);
W6JL = kw7i + s3Hh(Fk_I);
if qLN9(KcoB, W6JL) == step
break
end
end
Vd6G(step,:) = [KcoB, W6JL, eFsf, kw7i];
eFsf = KcoB;
kw7i = W6JL;
end
end
function [W B] = b_ip(B,UR9Z,vdcE)
W = [];
[si5q s3Hh] = wP9J(B,vdcE);
if s3Hh < 1
return
end
si5q=sortrows(si5q,-vdcE);
for vgxb = 1:s3Hh
if si5q(vgxb,2) >= 2
P_VQ = si5q(vgxb,1);
[mcFT g44R] = find(B == P_VQ);
jt35 = size(mcFT,1);
h3rO = jt35*(jt35-1)/2;
dist = zeros(h3rO,3);
o3eU = 0;
for LVgO = 1:jt35
for JVTI = (LVgO+1):jt35
o3eU = o3eU + 1;
dist(o3eU,1) = LVgO;
dist(o3eU,2) = JVTI;
dist(o3eU,3) = abs(mcFT(LVgO)-mcFT(JVTI)) + abs(g44R(LVgO)-g44R(JVTI));
end
end
[rIUr Xi7M] = sort(dist(:,3));
dist = dist(Xi7M,:);
A93q = reshape(dist(:,1:2)',[],1);
IsKD = 0;
XJo_ = 1;
kGPm = false(jt35,1);
for vgxb=1:jt35
tzAR = find( ~kGPm(A93q(XJo_:end)) , 1 , 'first');
if isempty(tzAR)
break
end
LVgO = A93q(tzAR);
Distance = abs(mcFT([1:LVgO-1,LVgO+1:end]')-mcFT(LVgO)) + abs(g44R([1:LVgO-1,LVgO+1:end]')-g44R(LVgO));
if max(Distance)>UR9Z-1
break
end
path = OSc4(B,mcFT(LVgO),g44R(LVgO),mcFT([1:LVgO-1,LVgO+1:end]'),g44R([1:LVgO-1,LVgO+1:end]'), -P_VQ, UR9Z, 2*P_VQ);
if size(path,1) > 0
W = [W; path];
B = LBM5(B,path,-P_VQ);
IsKD = 2;
break
end
end
if IsKD < 2
continue
end
for p6y8 = 3:jt35
[eS_a sDY_] = find(B == -P_VQ);
[mcFT g44R] = find(B == P_VQ);
[HZFV,vj9U] = meshgrid(mcFT,eS_a);
[kCgH,BZwW] = meshgrid(mcFT,eS_a);
Distance = abs(HZFV-vj9U) + abs(kCgH-BZwW);
if max(Distance(:))>UR9Z-1
break
end
path = OSc4(B,eS_a,sDY_,mcFT,g44R, -P_VQ, UR9Z, 2*P_VQ);
if size(path,1) > 0
W = [W; path];
B = LBM5(B,path,-P_VQ);
Uwxi = true;
else
break
end
end
end
end
end
function [W B] = PwCH(B,W,LkNe,vdcE)
[si5q s3Hh] = wP9J(B,vdcE);
if s3Hh < 1, return, end
si5q=sortrows(si5q,-vdcE);
for vgxb = 1:s3Hh
P_VQ = si5q(vgxb,1);
qbti = sum(B == -P_VQ);
if qbti == 0
if si5q(vgxb,2) >= 2
[mcFT g44R] = find(B == P_VQ);
jt35 = size(mcFT,1);
h3rO = jt35*(jt35-1)/2;
dist = zeros(h3rO,3);
o3eU = 0;
for LVgO = 1:jt35
for JVTI = (LVgO+1):jt35
o3eU = o3eU + 1;
dist(o3eU,1) = LVgO;
dist(o3eU,2) = JVTI;
dist(o3eU,3) = abs(mcFT(LVgO)-mcFT(JVTI)) + abs(g44R(LVgO)-g44R(JVTI));
end
end
[rIUr Xi7M] = sort(dist(:,3));
dist = dist(Xi7M,:);
maxstep = min(LkNe,2*P_VQ+1);
Uwxi = false;
for o3eU = 1:h3rO
if dist(o3eU,3) > maxstep+1
break
end
LVgO = dist(o3eU,1);
JVTI = dist(o3eU,2);
path = ffzy(B,[mcFT(LVgO); mcFT(JVTI)], [g44R(LVgO); g44R(JVTI)], -P_VQ, LkNe, 2*P_VQ);
if size(path,1) > 0
W = [W; path];
B = LBM5(B,path,-P_VQ);
Uwxi = true;
break
end
end
if ~Uwxi
continue
end
end
end
[mcFT g44R] = find(B == P_VQ);
eCnS = size(mcFT,1);
maxstep = min(LkNe,P_VQ+1);
for p6y8 = 1:eCnS
[eS_a sDY_] = find(B == -P_VQ);
[mcFT g44R] = find(B == P_VQ);
Uwxi = false;
path = OSc4(B,eS_a,sDY_,mcFT,g44R, -P_VQ, LkNe, P_VQ);
if size(path,1) > 0
W = [W; path];
B = LBM5(B,path,-P_VQ);
Uwxi = true;
end
if ~Uwxi
break
end
end
end
end
function [W B] = D5VC(dS43,B,W,hNo1,LkNe,vdcE)
function s6BX()
for byv1 = 1:size(path,1);
if path(byv1,1) == path(byv1,3)
fUlS(path(byv1,1),path(byv1,2)) = false;
fUlS(path(byv1,3),path(byv1,4)) = false;
if path(byv1,2) == path(byv1,4)
B(path(byv1,1),path(byv1,2)) = -9999;
end
end
if path(byv1,2) == path(byv1,4)
tFjF(path(byv1,1),path(byv1,2)) = false;
tFjF(path(byv1,3),path(byv1,4)) = false;
end
end
end
[fUlS tFjF] = GtZG(dS43,B,W);
[si5q s3Hh] = wP9J(B,vdcE);
if s3Hh < 1, return, end
si5q=sortrows(si5q,-vdcE);
for vgxb = 1:s3Hh
P_VQ = si5q(vgxb,1);
qbti = sum(B == -P_VQ);
if qbti == 0
if si5q(vgxb,2) >= 2
[mcFT g44R] = find(B == P_VQ);
jt35 = size(mcFT,1);
h3rO = jt35*(jt35-1)/2;
dist = zeros(h3rO,3);
o3eU = 0;
for LVgO = 1:jt35
for JVTI = (LVgO+1):jt35
o3eU = o3eU + 1;
dist(o3eU,1) = LVgO;
dist(o3eU,2) = JVTI;
dist(o3eU,3) = abs(mcFT(LVgO)-mcFT(JVTI)) + abs(g44R(LVgO)-g44R(JVTI));
end
end
[rIUr Xi7M] = sort(dist(:,3));
dist = dist(Xi7M,:);
maxstep = min((hNo1*25)+LkNe,2*P_VQ+1);
Uwxi = false;
for o3eU = 1:h3rO
if dist(o3eU,3) > maxstep+1
break
end
LVgO = dist(o3eU,1);
JVTI = dist(o3eU,2);
path = Rqjn(B,fUlS,tFjF,[mcFT(LVgO); mcFT(JVTI)], [g44R(LVgO); g44R(JVTI)], -P_VQ, hNo1, LkNe, 2*P_VQ);
if size(path,1) > 0
W = [W; path];
B = LBM5(B,path,-P_VQ);
s6BX();
Uwxi = true;
break
end
end
if ~Uwxi
continue
end
end
end
[mcFT g44R] = find(B == P_VQ);
eCnS = size(mcFT,1);
maxstep = min((hNo1*25)+LkNe,P_VQ+1);
for p6y8 = 1:eCnS
[eS_a sDY_] = find(B == -P_VQ);
[mcFT g44R] = find(B == P_VQ);
Uwxi = false;
path = roei(B,fUlS,tFjF,eS_a,sDY_,mcFT,g44R, -P_VQ, hNo1, LkNe, P_VQ);
if size(path,1) > 0
W = [W; path];
B = LBM5(B,path,-P_VQ);
s6BX();
Uwxi = true;
end
if ~Uwxi
break
end
end
end
end
function path = roei(B,YCdt,P41f,rowS,colS,h_OL,LMhq,a4oA,hNo1,dDh9,XaZW)
function path = hh3d(grc8,step)
PRo0(grc8) = pIup;
path = zeros(step,4);
AHK1 = 0;
FlOv = 0;
NA4X = zeros(step,1);
epUM = zeros(step,1);
HrSM = zeros(step,1);
while isempty(find(PQyX==grc8,1))
AHK1 = AHK1 + 1;
NA4X(AHK1,1) = grc8;
oiEX = PRo0(grc8);
epUM(AHK1,1) = oiEX;
grc8 = oiEX;
if jCGx(grc8)
FlOv = FlOv + 1;
HrSM(FlOv,1) = grc8;
end
end
NA4X = [ NA4X(1:AHK1,:) ; HrSM(1:FlOv,1) ];
epUM = [ epUM(1:AHK1,:) ; HrSM(1:FlOv,1) ];
path = [ mod(NA4X,QHFY) , ceil(NA4X/QHFY) , mod(epUM,QHFY) , ceil(epUM/QHFY) ];
end
[QHFY LwZG] = size(B);
jCGx = false(QHFY,LwZG);
PRo0 = zeros(QHFY,LwZG);
k_AX = -ones(QHFY,LwZG);
PQyX = rowS + (colS-1)*QHFY;
k_AX(PQyX) = 0;
k_AX(h_OL + (LMhq-1)*QHFY) = -2;
maxstep = min((hNo1*25)+dDh9,XaZW+1);
gnkc = zeros(maxstep+26,1);
mCE4 = [-1 1];
for step = 0:maxstep
if step == 0
nqs5 = PQyX;
elseif gnkc(step) == 0
continue
else
nqs5 = find(k_AX == step);
end
jt35 = numel(nqs5);
for vgxb = 1:jt35
pIup = nqs5(vgxb);
for jG68 = 1:2
grc8 = pIup + mCE4(jG68) * QHFY;
lguM = k_AX(grc8);
if lguM == -2
path = hh3d(grc8,step+1);
return
elseif lguM == -1
if B(grc8) == 0
k_AX(grc8) = step+1; gnkc(step+1) = 1;
PRo0(grc8) = pIup;
elseif YCdt(grc8)
k_AX(grc8) = step+26; gnkc(step+26) = 1;
PRo0(grc8) = pIup;
jCGx(grc8) = true;
end
end
end
for jG68 = 1:2
grc8 = pIup + mCE4(jG68);
lguM = k_AX(grc8);
if lguM == -2
path = hh3d(grc8,step+1);
return
elseif lguM == -1
if B(grc8) == 0
k_AX(grc8) = step+1; gnkc(step+1) = 1;
PRo0(grc8) = pIup;
elseif P41f(grc8)
k_AX(grc8) = step+26; gnkc(step+26) = 1;
PRo0(grc8) = pIup;
jCGx(grc8) = true;
end
end
end
end
end
path = zeros(0,4);
end
function path = OSc4(B,rowS,colS,yOja,zVKA,a4oA,UR9Z,XaZW)
[QHFY LwZG] = size(B);
DUm_ = zeros(QHFY,LwZG);
bieJ = zeros(QHFY,LwZG);
k_AX = -ones(QHFY,LwZG);
k_AX(rowS+(colS-1)*QHFY) = 0;
k_AX(yOja+(zVKA-1)*QHFY) = -2;
IbqY = zeros(QHFY*LwZG,1);
tY36 = zeros(QHFY*LwZG,1);
count = numel(rowS);
IbqY(1:count) = rowS;
tY36(1:count) = colS;
m8k9=[-1 1 0 0];
z2EA=[0 0 -1 1];
for step = 0:min(UR9Z,XaZW)
if count < 1, break, end
jt35 = count;
mcFL = IbqY(1:jt35);
BS3b = tY36(1:jt35);
count = 0;
for vgxb = 1:jt35
Itok = BS3b(vgxb);
pIup = mcFL(vgxb);
for VIwz=1:4
ORB_ = pIup + m8k9(VIwz);
fCS2 = Itok + z2EA(VIwz);
grc8 = ORB_ + (fCS2-1)*QHFY;
lguM = k_AX(grc8);
if lguM == -2
CCRs=step+1;
DUm_(ORB_,fCS2) = mcFL(vgxb);
bieJ(ORB_,fCS2) = BS3b(vgxb);
path = zeros(CCRs,4);
for p6y8 = 1:CCRs
path(p6y8,1:2) = [ORB_ fCS2];
khtQ = DUm_(ORB_,fCS2);
S912 = bieJ(ORB_,fCS2);
path(p6y8,3:4) = [khtQ S912];
ORB_ = khtQ;
fCS2 = S912;
end
return
end
if lguM == -1 && B(grc8) == 0
k_AX(grc8) = step+1;
DUm_(grc8) = pIup;
bieJ(grc8) = Itok;
count = count + 1; IbqY(count) = ORB_; tY36(count) = fCS2;
end
end
end
end
path = [];
end
|