| Code: | function W = solv(B)
hDpN=31667;
WTG4 = rand(43,1);
W=biZ9(B);
CGbk = LYZ5(B,W);
[xw9k,jhzE] = size(B);
oc_J = B(xw9k:-1:1,:);
oc_J = oc_J.';
[AaFq,O5X9] = ycBv(oc_J,[1 2],[1 2],4*xw9k*jhzE);
if CGbk > O5X9
W = [xw9k-AaFq(:,2)+1 AaFq(:,1) xw9k-AaFq(:,4)+1 AaFq(:,3)];
CGbk=O5X9;
end
K7dU=rand('state');
rand(hDpN,1);
if CGbk>1000
[AaFq,O5X9] = ycBv(oc_J,[1 2],[1 2],4*xw9k*jhzE);
if CGbk > O5X9
W = [xw9k-AaFq(:,2)+1 AaFq(:,1) xw9k-AaFq(:,4)+1 AaFq(:,3)];
CGbk=O5X9;
end
end
rand('state',K7dU);
end
function [W,CGbk] = ycBv(orC5,vXFD,TMvo,c_3p)
[b_kF,Gai9]=size(orC5);
sWQS= -ones(b_kF+2,Gai9+2);
sWQS(2:end-1,2:end-1)=orC5;
Z3lE = sWQS;
fEG8 = 4;
if size(Z3lE,2) > 20
Ulvu = 4;
dlLf = 8;
Y3Vc = 18;
else
Ulvu = 3;
dlLf = 7;
Y3Vc = 13;
end
CGbk = inf;
dDN5 = [1 2;2 1];
uN9Q = [1 3;3 1];
VP1p = [3 2 1;1 2 3];
for YHj7 = vXFD
if YHj7 == 2
[Gcal mpmH] = WYEw(Z3lE,Ulvu,dDN5(YHj7,:));
[ZRTj tI0M] = RNQx(mpmH,Gcal,dlLf,uN9Q(YHj7,:));
[D38z SG3z] = RNQx(tI0M,ZRTj,Y3Vc,uN9Q(YHj7,:));
else
[Gcal mpmH] = WYEw(Z3lE,4,dDN5(YHj7,:));
[D38z SG3z] = RNQx(mpmH,Gcal,11,uN9Q(YHj7,:));
end
for SGwM = TMvo
omn_ = WbC1(Z3lE,SG3z,D38z,fEG8,Y3Vc,VP1p(SGwM,:))-1;
BR6C = LYZ5(orC5,omn_);
if BR6C <= CGbk
CGbk = BR6C;
W = omn_;
fEG8 = fEG8 - 1;
end
end
end
end
function NIKx = LYZ5(B,W)
b_kF=size(B,1);
B(W(:,1)+(W(:,2)-1)*b_kF)=0;
B(W(:,3)+(W(:,4)-1)*b_kF)=0;
NIKx=sum(B(:))+size(W,1)+sum(W(:,1)==W(:,3)&W(:,2)==W(:,4))*24;
end
function [WBqf nMO7] = fkNy(B,FT_c)
Lys6 = sort(B(B>0),'descend');
bhJW = size(Lys6,1);
if bhJW < 1
WBqf = [];
nMO7 = 0;
return
end
u0Pf=Lys6(diff([0;Lys6])~=0);
WBqf = zeros(nnz(u0Pf),3);
pJfD=histc(Lys6,u0Pf(end:-1:1));
WBqf(:,1)=u0Pf;
WBqf(:,2)=pJfD(end:-1:1);
nMO7=nnz(u0Pf);
if FT_c < 3, return, end
for d9aP = 1:nMO7
if WBqf(d9aP,2) >= 2
Tb2s = WBqf(d9aP,1);
[NGLO jqid] = find(B == Tb2s);
aTTi = 0;
nBFe = size(NGLO,1);
aTTi=sum(abs(diff(NGLO))+abs(diff(jqid)));
WBqf(d9aP,3) = WBqf(d9aP,2)*Tb2s - 0.85 * aTTi;
end
end
end
function [W B] = WYEw(B,Y3Vc,FT_c)
W = [];
[WBqf nMO7] = fkNy(B,FT_c);
if nMO7 < 1
return
end
WBqf=sortrows(WBqf,-FT_c);
for d9aP = 1:nMO7
if WBqf(d9aP,2) >= 2
Tb2s = WBqf(d9aP,1);
[NGLO jqid] = find(B == Tb2s);
nBFe = size(NGLO,1);
IDuP = nBFe*(nBFe-1)/2;
dist = zeros(IDuP,3);
[WOQ8 tQEG]=find(tril(ones(nBFe),-1));
dist(:,1)=tQEG;
dist(:,2)=WOQ8;
dist(:,3)=abs(jqid(WOQ8)-jqid(tQEG))+abs(NGLO(WOQ8)-NGLO(tQEG));
[aTTi SoIC] = sort(dist(:,3));
dist = dist(SoIC,:);
bhJW = 0;
for YHj7 = 1:IDuP
if dist(YHj7,3) > Y3Vc+1
break
end
wBSz = dist(YHj7,1);
CwgD = dist(YHj7,2);
path = Xzn2(B,[NGLO(wBSz); NGLO(CwgD)], [jqid(wBSz); jqid(CwgD)], -Tb2s, Y3Vc, 2*Tb2s);
if size(path,1) > 0
W = [W; path];
B = vTZb(B,path,-Tb2s);
bhJW = 2;
edit = [1:(wBSz-1) (wBSz+1):(CwgD-1) (CwgD+1):nBFe];
NGLO = [NGLO(wBSz); NGLO(CwgD); NGLO(edit)];
jqid = [jqid(wBSz); jqid(CwgD); jqid(edit)];
break
else
end
end
if bhJW < 2
continue
end
for WWPC = 3:nBFe
[LAnk U5IT] = find(B == -Tb2s);
ADsZ = size(LAnk,1);
IDuP = ADsZ * (nBFe - bhJW);
dist = zeros(IDuP,3);
YHj7 = 0;
for wBSz = 1:ADsZ
for CwgD = (bhJW+1):nBFe
YHj7 = YHj7 + 1;
dist(YHj7,1) = wBSz;
dist(YHj7,2) = CwgD;
dist(YHj7,3) = abs(LAnk(wBSz)-NGLO(CwgD)) + abs(U5IT(wBSz)-jqid(CwgD));
end
end
[aTTi SoIC] = sort(dist(:,3));
dist = dist(SoIC,:);
Dw5j = false(nBFe,1);
cniU = false;
for YHj7 = 1:IDuP
if dist(YHj7,3) > Y3Vc+1
break
end
CwgD = dist(YHj7,2);
if Dw5j(CwgD)
randperm(4);
continue
end
wBSz = dist(YHj7,1);
path = Xzn2(B,[LAnk(wBSz); NGLO(CwgD)], [U5IT(wBSz); jqid(CwgD)], -Tb2s, Y3Vc, Tb2s);
Dw5j(CwgD)=true;
if size(path,1) > 0
W = [W; path];
B = vTZb(B,path,-Tb2s);
bhJW = bhJW + 1;
cniU = true;
NGLO([WWPC CwgD]) = NGLO([CwgD WWPC]);
jqid([WWPC CwgD]) = jqid([CwgD WWPC]);
break
end
end
if ~cniU
break
end
end
end
end
end
function [W B] = RNQx(B,W,GYOU,FT_c)
[WBqf nMO7] = fkNy(B,FT_c);
if nMO7 < 1, return, end
WBqf=sortrows(WBqf,-FT_c);
for d9aP = 1:nMO7
Tb2s = WBqf(d9aP,1);
ADsZ = sum(B == -Tb2s);
if ADsZ == 0
if WBqf(d9aP,2) >= 2
[NGLO jqid] = find(B == Tb2s);
nBFe = size(NGLO,1);
IDuP = nBFe*(nBFe-1)*.5;
dist = zeros(IDuP,3);
YHj7 = 0;
for wBSz = 1:nBFe
for CwgD = (wBSz+1):nBFe
YHj7 = YHj7 + 1;
dist(YHj7,1) = wBSz;
dist(YHj7,2) = CwgD;
dist(YHj7,3) = abs(NGLO(wBSz)-NGLO(CwgD)) + abs(jqid(wBSz)-jqid(CwgD));
end
end
[aTTi SoIC] = sort(dist(:,3));
dist = dist(SoIC,:);
maxstep = min(GYOU,2*Tb2s+1);
cniU = false;
for YHj7 = 1:IDuP
if dist(YHj7,3) > maxstep+1
break
end
wBSz = dist(YHj7,1);
CwgD = dist(YHj7,2);
path = Xzn2(B,[NGLO(wBSz); NGLO(CwgD)], [jqid(wBSz); jqid(CwgD)], -Tb2s, GYOU, 2*Tb2s);
if size(path,1) > 0
W = [W; path];
B = vTZb(B,path,-Tb2s);
cniU = true;
break
end
end
if ~cniU
continue
end
end
end
[NGLO jqid] = find(B == Tb2s);
o8bt = size(NGLO,1);
maxstep = min(GYOU,Tb2s+1);
for WWPC = 1:o8bt
[LAnk U5IT] = find(B == -Tb2s);
ADsZ = size(LAnk,1);
IDuP = ADsZ * (o8bt-WWPC+1);
dist = zeros(IDuP,3);
YHj7 = 0;
for wBSz = 1:ADsZ
for CwgD = WWPC:o8bt
YHj7 = YHj7 + 1;
dist(YHj7,1) = wBSz;
dist(YHj7,2) = CwgD;
dist(YHj7,3) = abs(LAnk(wBSz)-NGLO(CwgD)) + abs(U5IT(wBSz)-jqid(CwgD));
end
end
[aTTi SoIC] = sort(dist(:,3));
dist = dist(SoIC,:);
Dw5j = false(o8bt,1);
cniU = false;
for YHj7 = 1:IDuP
if dist(YHj7,3) > maxstep+1
break
end
CwgD = dist(YHj7,2);
if Dw5j(CwgD)
randperm(4);
continue
end
wBSz = dist(YHj7,1);
path = Xzn2(B,[LAnk(wBSz); NGLO(CwgD)], [U5IT(wBSz); jqid(CwgD)], -Tb2s, GYOU, 2*Tb2s);
Dw5j(CwgD)=true;
if size(path,1) > 0
W = [W; path];
B = vTZb(B,path,-Tb2s);
cniU = true;
NGLO([WWPC CwgD]) = NGLO([CwgD WWPC]);
jqid([WWPC CwgD]) = jqid([CwgD WWPC]);
break
end
end
if ~cniU
break
end
end
end
end
function [O4MN FBMD] = Tvgg(sWQS,B,path)
[M6rH w0VB] = size(B);
O4MN = sWQS == 0;
FBMD = O4MN;
O4MN(:,[1 w0VB]) = false;
FBMD([1 M6rH],:) = false;
for d9aP = 1:size(path,1)
if path(d9aP,1) == path(d9aP,3)
O4MN(path(d9aP,1),path(d9aP,2)) = false;
O4MN(path(d9aP,3),path(d9aP,4)) = false;
end
if path(d9aP,2) == path(d9aP,4)
FBMD(path(d9aP,1),path(d9aP,2)) = false;
FBMD(path(d9aP,3),path(d9aP,4)) = false;
end
end
end
function B = vTZb(B,path,S1is)
B(path(1,1),path(1,2)) = S1is;
for d9aP = 1:size(path,1);
B(path(d9aP,3),path(d9aP,4)) = S1is;
end
end
function path = JKVI(fvGV,DCPm,M6rH,aC1R)
path = zeros(aC1R,4);
Kqto = mod(fvGV,M6rH);
QOe1 = ceil(fvGV/M6rH);
for WWPC = 1:aC1R
path(WWPC,1:2) = [Kqto QOe1];
fvGV = DCPm(fvGV);
Kqto = mod(fvGV,M6rH);
QOe1 = ceil(fvGV/M6rH);
path(WWPC,3:4) = [Kqto QOe1];
end
end
function path = Xzn2(B,NGLO,jqid,S1is,Y3Vc,P_xc)
[M6rH w0VB] = size(B);
DCPm = zeros(M6rH,w0VB);
NztM = -ones(M6rH,w0VB);
NztM(NGLO(2),jqid(2)) = 0;
NztM(NGLO(1),jqid(1)) = -2;
NztM( B == S1is ) = -2;
cm_i = zeros(M6rH*w0VB,1);
cm_i(1) = NGLO(2) + (jqid(2)-1)*M6rH;
count = 1;
i9Tz = [-1 1 -M6rH M6rH];
nSHk = randperm(4);
for step = 0:min(Y3Vc,P_xc)
if count < 1, break, end
nBFe = count;
fvGV = cm_i;
count = 0;
for d9aP = 1:nBFe
vLN6 = fvGV(d9aP);
for LHwr=1:4
VGV1 = vLN6 + i9Tz(nSHk(LHwr));
eAbW = NztM(VGV1);
if eAbW == -2
DCPm(VGV1) = vLN6;
path = JKVI(VGV1,DCPm,M6rH,step+1);
return
end
if eAbW == -1 && B(VGV1) == 0
NztM(VGV1) = step+1;
DCPm(VGV1) = vLN6;
count = count + 1;
cm_i(count) = VGV1;
end
end
end
end
path = [];
end
function path = XuC4(B,O4MN,FBMD,NGLO,jqid,S1is,fEG8,GYOU,P_xc)
[M6rH w0VB] = size(B);
QMGW = false(M6rH,w0VB);
DCPm = zeros(M6rH,w0VB);
NztM = -ones(M6rH,w0VB);
NztM(NGLO(1),jqid(1)) = -2;
NztM( B == S1is ) = -2;
maxstep = min((fEG8*27)+GYOU,P_xc+1);
iYOa = zeros(maxstep+28,1);
iYOa(1) = NGLO(2) + (jqid(2)-1)*M6rH;
i9Tz = [-M6rH M6rH -1 1];
for step = 1:maxstep
while iYOa(step)>0
vLN6 = iYOa(step);
iYOa(step)=NztM(vLN6);
for LHwr = 1:4
VGV1 = vLN6 + i9Tz(LHwr);
eAbW = NztM(VGV1);
if eAbW==-1
if B(VGV1) == 0
NztM(VGV1) = iYOa(step+1);
iYOa(step+1) = VGV1;
DCPm(VGV1) = vLN6;
elseif (O4MN(VGV1)&&(LHwr<3)) || (FBMD(VGV1)&&(LHwr>2))
NztM(VGV1) = iYOa(step+26);
iYOa(step+26) = VGV1;
DCPm(VGV1) = vLN6;
QMGW(VGV1) = true;
end
end
if eAbW==-2
step=step+1;
DCPm(VGV1) = vLN6;
Kqto=mod(VGV1,M6rH);
QOe1=ceil(VGV1/M6rH);
path = zeros(step,4);
WWPC = 0;
while Kqto ~= NGLO(2) || QOe1 ~= jqid(2)
WWPC = WWPC + 1;
path(WWPC,1:2) = [Kqto QOe1];
VGV1 = Kqto + (QOe1-1)*M6rH;
B7Y0 = DCPm(VGV1);
G_71=mod(B7Y0,M6rH);
z8zv=ceil(B7Y0/M6rH);
path(WWPC,3:4) = [G_71 z8zv];
Kqto = G_71;
QOe1 = z8zv;
if QMGW(Kqto,QOe1)
WWPC = WWPC + 1;
path(WWPC,:) = [Kqto QOe1 Kqto QOe1];
end
end
path = path(1:WWPC,:);
return
end
end
end
end
path = [];
end
function W = biZ9(B)
[W,CGbk] = gs6x(B);
BU_I = 0;
Whr4 = round(mod(B(:),2));
if CGbk < 2100
return
end
[YBU4,R8UH] = size(B);
B = flipud(fliplr(B'));
[Y8w3,T1qU] = gs6x(B);
if CGbk > T1qU
W = [YBU4-Y8w3(:,2)+1 R8UH-Y8w3(:,1)+1 YBU4-Y8w3(:,4)+1 R8UH-Y8w3(:,3)+1];
end
if Whr4~=BU_I; W = zeros(0,4); end
end
function [W,CGbk] = gs6x(B)
[b_kF,Gai9]=size(B);
CLJu=nan(b_kF+2,Gai9+2);
CLJu(2:end-1,2:end-1)=B;
Z3lE = CLJu;
fEG8 = 4;
if size(Z3lE,2) > 20
Ulvu = 4;
dlLf = 8;
Y3Vc = 12;
else
Ulvu = 3;
dlLf = 7;
Y3Vc = 11;
end
CGbk = inf;
dDN5 = [1 2;2 1];
uN9Q = [1 3;3 1];
VP1p = [3 2 1;1 2 3];
for YHj7 = 1:2
if YHj7 == 2
[Gcal mpmH] = jF0D(Z3lE,Ulvu,dDN5(YHj7,:));
[ZRTj tI0M] = I4AZ(mpmH,Gcal,dlLf,uN9Q(YHj7,:));
[D38z SG3z] = I4AZ(tI0M,ZRTj,Y3Vc,uN9Q(YHj7,:));
else
[Gcal mpmH] = jF0D(Z3lE,4,dDN5(YHj7,:));
[D38z SG3z] = I4AZ(mpmH,Gcal,11,uN9Q(YHj7,:));
end
for SGwM = 1:2
if YHj7 == 2 && SGwM == 2 && CGbk > 2100, return, end
omn_ = WbC1(Z3lE,SG3z,D38z,fEG8,Y3Vc,VP1p(SGwM,:))-1;
BR6C = LYZ5(B,omn_);
if BR6C <= CGbk
CGbk = BR6C;
W = omn_;
fEG8 = fEG8 - 1;
end
end
end
if b_kF*Gai9 > 290; return; end
Jo0U = sum(W(:,1)==W(:,3)&W(:,2)==W(:,4));
if Jo0U <= 4
EmwM = ypSO(B);
sn2C = LYZ5(B,EmwM);
if sn2C < CGbk
W = EmwM;
CGbk = sn2C;
end
end
end
function path = L9wD(B,NGLO,jqid,S1is,Y3Vc,P_xc)
function path = Bd2U(Ixcz,FqBZ,WPLx)
l2Qz(Ixcz,FqBZ) = LRVV(d9aP);
LhBb(Ixcz,FqBZ) = lwSQ(d9aP);
path = zeros(WPLx,4);
for nIqt = 1:WPLx
path(nIqt,1:2) = [Ixcz FqBZ];
gPvu = l2Qz(Ixcz,FqBZ);
cQjT = LhBb(Ixcz,FqBZ);
path(nIqt,3:4) = [gPvu cQjT];
Ixcz = gPvu;
FqBZ = cQjT;
end
end
[M6rH w0VB] = size(B);
l2Qz = zeros(M6rH,w0VB);
LhBb = zeros(M6rH,w0VB);
NztM = -ones(M6rH,w0VB);
NztM(NGLO(2),jqid(2)) = 0;
NztM(NGLO(1),jqid(1)) = -2;
NztM( B == S1is ) = -2;
LneJ = zeros(M6rH*w0VB,1);
SMJz = zeros(M6rH*w0VB,1);
count = 1;
LneJ(1) = NGLO(2);
SMJz(1) = jqid(2);
pimw=[-1 1 0 0];
O3If=[0 0 -1 1];
for step = 0:min(Y3Vc,P_xc)
if count < 1, break, end
nBFe = count;
LRVV = LneJ(1:nBFe);
lwSQ = SMJz(1:nBFe);
count = 0;
for d9aP = 1:nBFe
XkAD = lwSQ(d9aP);
vLN6 = LRVV(d9aP);
for LHwr=1:4
Ixcz = vLN6 + pimw(LHwr);
FqBZ = XkAD + O3If(LHwr);
VGV1 = Ixcz + (FqBZ-1)*M6rH;
eAbW = NztM(VGV1);
if eAbW == -2
path = Bd2U(Ixcz,FqBZ,step+1);
return
elseif eAbW == -1 && B(VGV1) == 0
NztM(VGV1) = step+1;
l2Qz(VGV1) = vLN6;
LhBb(VGV1) = XkAD;
count = count + 1; LneJ(count) = Ixcz; SMJz(count) = FqBZ;
end
end
end
end
path = [];
end
function Bw3l = ypSO(CwgD)
Tb2s = unique(CwgD);
Tb2s(1) = [];
Mnhr = zeros(size(Tb2s));
for d9aP = 1:length(Mnhr)
Mnhr(d9aP) = nnz(Tb2s(d9aP) == CwgD(:));
end
for d9aP = 1:length(Mnhr)
if Mnhr(d9aP) == 1
CwgD(Tb2s(d9aP) == CwgD(:)) = -1;
end
end
NxL1 = zeros(size(CwgD)+2);
QNiB = repmat(-1,size(NxL1));
QNiB(2:end-1,2:end-1) = CwgD;
Bw3l = [];
[Krn0, nit9] = find(QNiB>0);
aTTi = (size(QNiB,1)/2 - Krn0).^2 + (size(QNiB,2)/2 - nit9).^2;
[aTTi, order] = sort(aTTi);
order = order';
for nMO7 = 1:length(Krn0)-1
vDS7 = 0;
uU1I = 32;
for d9aP = order
if NxL1(Krn0(d9aP), nit9(d9aP))
continue
end
[NIKx, RSRR, Bf6c] = QT_f(QNiB, NxL1, Krn0(d9aP), nit9(d9aP), uU1I);
if NIKx > vDS7
vDS7 = NIKx;
FvMq = RSRR;
uU1I = Bf6c;
if uU1I == 1
break
end
end
end
if vDS7 == 0
Bw3l = Bw3l - 1;
return
end
NxL1 = vTZb(NxL1, FvMq, QNiB(FvMq(1,1), FvMq(1,2)));
QNiB = vTZb(QNiB, FvMq, QNiB(FvMq(1,1), FvMq(1,2)));
Bw3l = [Bw3l; FvMq];
end
Bw3l = Bw3l - 1;
end
function [vDS7, FvMq, uU1I] = QT_f(CwgD, NxL1, fvGV, lwSQ, Ewhq)
vDS7 = 0;
FvMq = [];
nIqt = [1 -1 0 0];
nMO7 = [0 0 1 -1];
if ~any(NxL1(:)==CwgD(fvGV,lwSQ))
NxL1 = CwgD;
end
QNiB = CwgD;
QNiB(QNiB>0) = -1;
QNiB(fvGV,lwSQ) = 1;
uU1I = Inf;
Tb2s = CwgD(fvGV,lwSQ);
for d9aP = 1:Ewhq-2
[Krn0, nit9] = find(QNiB==d9aP);
for Mnhr = 1:length(Krn0)
for LYvY = 1:4
h0ol = Krn0(Mnhr) + nIqt(LYvY);
TlRb = nit9(Mnhr) + nMO7(LYvY);
if NxL1(h0ol,TlRb) == Tb2s && ~(h0ol == fvGV && TlRb == lwSQ)
uU1I = d9aP;
break
end
TXbb = QNiB(h0ol,TlRb);
if TXbb == 0
QNiB(h0ol,TlRb) = d9aP+1;
end
end
if uU1I < Inf
break
end
end
if uU1I < Inf
break
end
end
if uU1I == Inf
return
end
vDS7 = CwgD(fvGV,lwSQ) - uU1I;
if uU1I == 1
FvMq = [fvGV, lwSQ, h0ol, TlRb];
return
end
FvMq = zeros(uU1I,4);
for step = uU1I:-1:1
for LYvY = 1:4
G2kF = h0ol + nIqt(LYvY);
kZY4 = TlRb + nMO7(LYvY);
if QNiB(G2kF, kZY4) == step
break
end
end
FvMq(step,:) = [G2kF, kZY4, h0ol, TlRb];
h0ol = G2kF;
TlRb = kZY4;
end
end
function [W B] = jF0D(B,Y3Vc,FT_c)
W = [];
[WBqf nMO7] = fkNy(B,FT_c);
if nMO7 < 1
return
end
WBqf=sortrows(WBqf,-FT_c);
for d9aP = 1:nMO7
if WBqf(d9aP,2) >= 2
Tb2s = WBqf(d9aP,1);
[NGLO jqid] = find(B == Tb2s);
nBFe = size(NGLO,1);
IDuP = nBFe*(nBFe-1)/2;
dist = zeros(IDuP,3);
YHj7 = 0;
for wBSz = 1:nBFe
for CwgD = (wBSz+1):nBFe
YHj7 = YHj7 + 1;
dist(YHj7,1) = wBSz;
dist(YHj7,2) = CwgD;
dist(YHj7,3) = abs(NGLO(wBSz)-NGLO(CwgD)) + abs(jqid(wBSz)-jqid(CwgD));
end
end
[aTTi SoIC] = sort(dist(:,3));
dist = dist(SoIC,:);
cBoV = reshape(dist(:,1:2)',[],1);
bhJW = 0;
RNpg = 1;
Qkz1 = false(nBFe,1);
for d9aP=1:nBFe
MEH8 = find( ~Qkz1(cBoV(RNpg:end)) , 1 , 'first');
if isempty(MEH8)
break
end
wBSz = cBoV(MEH8);
Distance = abs(NGLO([1:wBSz-1,wBSz+1:end]')-NGLO(wBSz)) + abs(jqid([1:wBSz-1,wBSz+1:end]')-jqid(wBSz));
if max(Distance)>Y3Vc-1
break
end
path = TbhQ(B,NGLO(wBSz),jqid(wBSz),NGLO([1:wBSz-1,wBSz+1:end]'),jqid([1:wBSz-1,wBSz+1:end]'), -Tb2s, Y3Vc, 2*Tb2s);
if size(path,1) > 0
W = [W; path];
B = vTZb(B,path,-Tb2s);
bhJW = 2;
break
end
end
if bhJW < 2
continue
end
for nIqt = 3:nBFe
[LAnk U5IT] = find(B == -Tb2s);
[NGLO jqid] = find(B == Tb2s);
[CVqm,TWie] = meshgrid(NGLO,LAnk);
[klUK,FcxF] = meshgrid(NGLO,LAnk);
Distance = abs(CVqm-TWie) + abs(klUK-FcxF);
if max(Distance(:))>Y3Vc-1
break
end
path = TbhQ(B,LAnk,U5IT,NGLO,jqid, -Tb2s, Y3Vc, 2*Tb2s);
if size(path,1) > 0
W = [W; path];
B = vTZb(B,path,-Tb2s);
cniU = true;
else
break
end
end
end
end
end
function [W B] = I4AZ(B,W,yETG,FT_c)
[WBqf nMO7] = fkNy(B,FT_c);
if nMO7 < 1, return, end
WBqf=sortrows(WBqf,-FT_c);
for d9aP = 1:nMO7
Tb2s = WBqf(d9aP,1);
ADsZ = sum(B == -Tb2s);
if ADsZ == 0
if WBqf(d9aP,2) >= 2
[NGLO jqid] = find(B == Tb2s);
nBFe = size(NGLO,1);
IDuP = nBFe*(nBFe-1)/2;
dist = zeros(IDuP,3);
YHj7 = 0;
for wBSz = 1:nBFe
for CwgD = (wBSz+1):nBFe
YHj7 = YHj7 + 1;
dist(YHj7,1) = wBSz;
dist(YHj7,2) = CwgD;
dist(YHj7,3) = abs(NGLO(wBSz)-NGLO(CwgD)) + abs(jqid(wBSz)-jqid(CwgD));
end
end
[aTTi SoIC] = sort(dist(:,3));
dist = dist(SoIC,:);
maxstep = min(yETG,2*Tb2s+1);
cniU = false;
for YHj7 = 1:IDuP
if dist(YHj7,3) > maxstep+1
break
end
wBSz = dist(YHj7,1);
CwgD = dist(YHj7,2);
path = L9wD(B,[NGLO(wBSz); NGLO(CwgD)], [jqid(wBSz); jqid(CwgD)], -Tb2s, yETG, 2*Tb2s);
if size(path,1) > 0
W = [W; path];
B = vTZb(B,path,-Tb2s);
cniU = true;
break
end
end
if ~cniU
continue
end
end
end
[NGLO jqid] = find(B == Tb2s);
jIvD = size(NGLO,1);
maxstep = min(yETG,Tb2s+1);
for nIqt = 1:jIvD
[LAnk U5IT] = find(B == -Tb2s);
[NGLO jqid] = find(B == Tb2s);
cniU = false;
path = TbhQ(B,LAnk,U5IT,NGLO,jqid, -Tb2s, yETG, Tb2s);
if size(path,1) > 0
W = [W; path];
B = vTZb(B,path,-Tb2s);
cniU = true;
end
if ~cniU
break
end
end
end
end
function [W B] = WbC1(CLJu,B,W,fEG8,yETG,FT_c)
function C370()
for Bw3l = 1:size(path,1);
if path(Bw3l,1) == path(Bw3l,3)
VAR3(path(Bw3l,1),path(Bw3l,2)) = false;
VAR3(path(Bw3l,3),path(Bw3l,4)) = false;
if path(Bw3l,2) == path(Bw3l,4)
B(path(Bw3l,1),path(Bw3l,2)) = -9999;
end
end
if path(Bw3l,2) == path(Bw3l,4)
yZYZ(path(Bw3l,1),path(Bw3l,2)) = false;
yZYZ(path(Bw3l,3),path(Bw3l,4)) = false;
end
end
end
[VAR3 yZYZ] = Tvgg(CLJu,B,W);
[WBqf nMO7] = fkNy(B,FT_c);
if nMO7 < 1, return, end
WBqf=sortrows(WBqf,-FT_c);
for d9aP = 1:nMO7
Tb2s = WBqf(d9aP,1);
ADsZ = sum(B == -Tb2s);
if ADsZ == 0
if WBqf(d9aP,2) >= 2
[NGLO jqid] = find(B == Tb2s);
nBFe = size(NGLO,1);
IDuP = nBFe*(nBFe-1)/2;
dist = zeros(IDuP,3);
YHj7 = 0;
for wBSz = 1:nBFe
for CwgD = (wBSz+1):nBFe
YHj7 = YHj7 + 1;
dist(YHj7,1) = wBSz;
dist(YHj7,2) = CwgD;
dist(YHj7,3) = abs(NGLO(wBSz)-NGLO(CwgD)) + abs(jqid(wBSz)-jqid(CwgD));
end
end
[aTTi SoIC] = sort(dist(:,3));
dist = dist(SoIC,:);
maxstep = min((fEG8*25)+yETG,2*Tb2s+1);
cniU = false;
for YHj7 = 1:IDuP
if dist(YHj7,3) > maxstep+1
break
end
wBSz = dist(YHj7,1);
CwgD = dist(YHj7,2);
path = XuC4(B,VAR3,yZYZ,[NGLO(wBSz); NGLO(CwgD)], [jqid(wBSz); jqid(CwgD)], -Tb2s, fEG8, yETG, 2*Tb2s);
if size(path,1) > 0
W = [W; path];
B = vTZb(B,path,-Tb2s);
C370();
cniU = true;
break
end
end
if ~cniU
continue
end
end
end
[NGLO jqid] = find(B == Tb2s);
jIvD = size(NGLO,1);
maxstep = min((fEG8*25)+yETG,Tb2s+1);
for nIqt = 1:jIvD
[LAnk U5IT] = find(B == -Tb2s);
[NGLO jqid] = find(B == Tb2s);
cniU = false;
path = HHiT(B,VAR3,yZYZ,LAnk,U5IT,NGLO,jqid, -Tb2s, fEG8, yETG, Tb2s);
if size(path,1) > 0
W = [W; path];
B = vTZb(B,path,-Tb2s);
C370();
cniU = true;
end
if ~cniU
break
end
end
end
end
function path = HHiT(B,O4MN,FBMD,rowS,colS,VhwA,mHuY,S1is,fEG8,GYOU,P_xc)
function path = JKVI(VGV1,step)
DCPm(VGV1) = vLN6;
path = zeros(step,4);
WWPC = 0;
uV7Y = 0;
PwD6 = zeros(step,1);
DoIc = zeros(step,1);
Penz = zeros(step,1);
while isempty(find(JJId==VGV1,1))
WWPC = WWPC + 1;
PwD6(WWPC,1) = VGV1;
B7Y0 = DCPm(VGV1);
DoIc(WWPC,1) = B7Y0;
VGV1 = B7Y0;
if QMGW(VGV1)
uV7Y = uV7Y + 1;
Penz(uV7Y,1) = VGV1;
end
end
PwD6 = [ PwD6(1:WWPC,:) ; Penz(1:uV7Y,1) ];
DoIc = [ DoIc(1:WWPC,:) ; Penz(1:uV7Y,1) ];
path = [ mod(PwD6,M6rH) , ceil(PwD6/M6rH) , mod(DoIc,M6rH) , ceil(DoIc/M6rH) ];
end
[M6rH w0VB] = size(B);
QMGW = false(M6rH,w0VB);
DCPm = zeros(M6rH,w0VB);
NztM = -ones(M6rH,w0VB);
JJId = rowS + (colS-1)*M6rH;
NztM(JJId) = 0;
NztM(VhwA + (mHuY-1)*M6rH) = -2;
maxstep = min((fEG8*25)+GYOU,P_xc+1);
MQGE = zeros(maxstep+26,1);
cdcp = [-1 1];
for step = 0:maxstep
if step == 0
fvGV = JJId;
elseif MQGE(step) == 0
continue
else
fvGV = find(NztM == step);
end
nBFe = numel(fvGV);
for d9aP = 1:nBFe
vLN6 = fvGV(d9aP);
for E4t1 = 1:2
VGV1 = vLN6 + cdcp(E4t1) * M6rH;
eAbW = NztM(VGV1);
if eAbW == -2
path = JKVI(VGV1,step+1);
return
elseif eAbW == -1
if B(VGV1) == 0
NztM(VGV1) = step+1; MQGE(step+1) = 1;
DCPm(VGV1) = vLN6;
elseif O4MN(VGV1)
NztM(VGV1) = step+26; MQGE(step+26) = 1;
DCPm(VGV1) = vLN6;
QMGW(VGV1) = true;
end
end
end
for E4t1 = 1:2
VGV1 = vLN6 + cdcp(E4t1);
eAbW = NztM(VGV1);
if eAbW == -2
path = JKVI(VGV1,step+1);
return
elseif eAbW == -1
if B(VGV1) == 0
NztM(VGV1) = step+1; MQGE(step+1) = 1;
DCPm(VGV1) = vLN6;
elseif FBMD(VGV1)
NztM(VGV1) = step+26; MQGE(step+26) = 1;
DCPm(VGV1) = vLN6;
QMGW(VGV1) = true;
end
end
end
end
end
path = zeros(0,4);
end
function path = TbhQ(B,rowS,colS,qHEk,obwf,S1is,Y3Vc,P_xc)
[M6rH w0VB] = size(B);
l2Qz = zeros(M6rH,w0VB);
LhBb = zeros(M6rH,w0VB);
NztM = -ones(M6rH,w0VB);
NztM(rowS+(colS-1)*M6rH) = 0;
NztM(qHEk+(obwf-1)*M6rH) = -2;
cm_i = zeros(M6rH*w0VB,1);
SMJz = zeros(M6rH*w0VB,1);
count = numel(rowS);
cm_i(1:count) = rowS;
SMJz(1:count) = colS;
pimw=[-1 1 0 0];
O3If=[0 0 -1 1];
for step = 0:min(Y3Vc,P_xc)
if count < 1, break, end
nBFe = count;
LRVV = cm_i(1:nBFe);
lwSQ = SMJz(1:nBFe);
count = 0;
for d9aP = 1:nBFe
XkAD = lwSQ(d9aP);
vLN6 = LRVV(d9aP);
for LHwr=1:4
Ixcz = vLN6 + pimw(LHwr);
FqBZ = XkAD + O3If(LHwr);
VGV1 = Ixcz + (FqBZ-1)*M6rH;
eAbW = NztM(VGV1);
if eAbW == -2
WPLx=step+1;
l2Qz(Ixcz,FqBZ) = LRVV(d9aP);
LhBb(Ixcz,FqBZ) = lwSQ(d9aP);
path = zeros(WPLx,4);
for nIqt = 1:WPLx
path(nIqt,1:2) = [Ixcz FqBZ];
gPvu = l2Qz(Ixcz,FqBZ);
cQjT = LhBb(Ixcz,FqBZ);
path(nIqt,3:4) = [gPvu cQjT];
Ixcz = gPvu;
FqBZ = cQjT;
end
return
end
if eAbW == -1 && B(VGV1) == 0
NztM(VGV1) = step+1;
l2Qz(VGV1) = vLN6;
LhBb(VGV1) = XkAD;
count = count + 1; cm_i(count) = Ixcz; SMJz(count) = FqBZ;
end
end
end
end
path = [];
end
|