function W = solv(B)
pQB9=284;
rhmX = rand(43,1);
W=ceHI(B);
Ie_4 = Lxug(B,W);
[NolT,rNDJ] = size(B);
sHEK = B(NolT:-1:1,:);
sHEK = sHEK.';
[e117,uTlp] = W7Ye(sHEK,[1 2],[1 2],4*NolT*rNDJ);
if Ie_4 > uTlp
W = [NolT-e117(:,2)+1 e117(:,1) NolT-e117(:,4)+1 e117(:,3)];
Ie_4=uTlp;
end
tnc9=rand('state');
rand(pQB9,1);
if Ie_4>1000 && rand<.5
[e117,uTlp] = W7Ye(sHEK,[1 2],[1 2],4*NolT*rNDJ);
if Ie_4 > uTlp
W = [NolT-e117(:,2)+1 e117(:,1) NolT-e117(:,4)+1 e117(:,3)];
Ie_4=uTlp;
end
end
if Ie_4>1000 && rand<.5
[e117,uTlp] = W7Ye(sHEK,[1 2],[1 2],4*NolT*rNDJ);
if Ie_4 > uTlp
W = [NolT-e117(:,2)+1 e117(:,1) NolT-e117(:,4)+1 e117(:,3)];
Ie_4=uTlp;
end
end
rand('state',tnc9);
end
function [W,Ie_4] = W7Ye(oMoe,AqJb,tapY,nII_)
[hr5f,zjY4]=size(oMoe);
lpB6= -ones(hr5f+2,zjY4+2);
lpB6(2:end-1,2:end-1)=oMoe;
BF81 = lpB6;
y8Om = 4;
if size(BF81,2) > 20
Jd3y = 4;
ussU = 8;
Olzq = 18;
else
Jd3y = 3;
ussU = 7;
Olzq = 13;
end
Ie_4 = inf;
rffI = [1 2;2 1];
u4Gj = [1 3;3 1];
YY6c = [3 2 1;1 2 3];
for E_9b = AqJb
if E_9b == 2
[gzw0 UHnT] = f9Vz(BF81,Jd3y,rffI(E_9b,:));
[ZIg_ Mkoi] = Fsz_(UHnT,gzw0,ussU,u4Gj(E_9b,:));
[EEZF hcgy] = Fsz_(Mkoi,ZIg_,Olzq,u4Gj(E_9b,:));
else
[gzw0 UHnT] = f9Vz(BF81,4,rffI(E_9b,:));
[EEZF hcgy] = Fsz_(UHnT,gzw0,11,u4Gj(E_9b,:));
end
for F_kD = tapY
nROc = TiSm(BF81,hcgy,EEZF,y8Om,Olzq,YY6c(F_kD,:))-1;
EeWe = Lxug(oMoe,nROc);
if EeWe <= Ie_4
Ie_4 = EeWe;
W = nROc;
y8Om = y8Om - 1;
end
end
end
end
function BRL7 = Lxug(B,W)
hr5f=size(B,1);
B(W(:,1)+(W(:,2)-1)*hr5f)=0;
B(W(:,3)+(W(:,4)-1)*hr5f)=0;
BRL7=sum(B(:))+size(W,1)+sum(W(:,1)==W(:,3)&W(:,2)==W(:,4))*24;
end
function [EDGz Jp8l] = pqbi(B,sTDV)
V9lN = sort(B(B>0),'descend');
M_Od = size(V9lN,1);
if M_Od < 1
EDGz = [];
Jp8l = 0;
return
end
PYwY=V9lN(diff([0;V9lN])~=0);
EDGz = zeros(nnz(PYwY),3);
kiry=histc(V9lN,PYwY(end:-1:1));
EDGz(:,1)=PYwY;
EDGz(:,2)=kiry(end:-1:1);
Jp8l=nnz(PYwY);
if sTDV < 3, return, end
for NUDC = 1:Jp8l
if EDGz(NUDC,2) >= 2
Ohr1 = EDGz(NUDC,1);
[VNmF z7G_] = find(B == Ohr1);
LNiu = 0;
fZfZ = size(VNmF,1);
LNiu=sum(abs(diff(VNmF))+abs(diff(z7G_)));
EDGz(NUDC,3) = EDGz(NUDC,2)*Ohr1 - 0.85 * LNiu;
end
end
end
function [W B] = f9Vz(B,Olzq,sTDV)
W = [];
[EDGz Jp8l] = pqbi(B,sTDV);
if Jp8l < 1
return
end
EDGz=sortrows(EDGz,-sTDV);
for NUDC = 1:Jp8l
if EDGz(NUDC,2) >= 2
Ohr1 = EDGz(NUDC,1);
[VNmF z7G_] = find(B == Ohr1);
fZfZ = size(VNmF,1);
EIQQ = fZfZ*(fZfZ-1)/2;
dist = zeros(EIQQ,3);
[QQ0h TACe]=find(tril(ones(fZfZ),-1));
dist(:,1)=TACe;
dist(:,2)=QQ0h;
dist(:,3)=abs(z7G_(QQ0h)-z7G_(TACe))+abs(VNmF(QQ0h)-VNmF(TACe));
[LNiu oQOA] = sort(dist(:,3));
dist = dist(oQOA,:);
M_Od = 0;
for E_9b = 1:EIQQ
if dist(E_9b,3) > Olzq+1
break
end
Dybm = dist(E_9b,1);
lntc = dist(E_9b,2);
path = fJ5x(B,[VNmF(Dybm); VNmF(lntc)], [z7G_(Dybm); z7G_(lntc)], -Ohr1, Olzq, 2*Ohr1);
if size(path,1) > 0
W = [W; path];
B = EI8A(B,path,-Ohr1);
M_Od = 2;
edit = [1:(Dybm-1) (Dybm+1):(lntc-1) (lntc+1):fZfZ];
VNmF = [VNmF(Dybm); VNmF(lntc); VNmF(edit)];
z7G_ = [z7G_(Dybm); z7G_(lntc); z7G_(edit)];
break
else
end
end
if M_Od < 2
continue
end
for twN_ = 3:fZfZ
[vUxj dk4r] = find(B == -Ohr1);
IhYx = size(vUxj,1);
EIQQ = IhYx * (fZfZ - M_Od);
su0f = (1:IhYx*fZfZ)';
lntc=mod(su0f-1,fZfZ)+1;
Dybm=ceil(su0f/fZfZ);
hygm = (lntc>M_Od);
Dybm = Dybm(hygm);
lntc = lntc(hygm);
LNiu = abs(vUxj(Dybm)-VNmF(lntc)) + abs(dk4r(Dybm)-z7G_(lntc));
dist = [Dybm,lntc,LNiu];
[LNiu oQOA] = sort(dist(:,3));
dist = dist(oQOA,:);
JREK = false(fZfZ,1);
WARv = false;
for E_9b = 1:EIQQ
if dist(E_9b,3) > Olzq+1
break
end
lntc = dist(E_9b,2);
if JREK(lntc)
randperm(4);
continue
end
Dybm = dist(E_9b,1);
path = fJ5x(B,[vUxj(Dybm); VNmF(lntc)], [dk4r(Dybm); z7G_(lntc)], -Ohr1, Olzq, Ohr1);
JREK(lntc)=true;
if size(path,1) > 0
W = [W; path];
B = EI8A(B,path,-Ohr1);
M_Od = M_Od + 1;
WARv = true;
VNmF([twN_ lntc]) = VNmF([lntc twN_]);
z7G_([twN_ lntc]) = z7G_([lntc twN_]);
break
end
end
if ~WARv
break
end
end
end
end
end
function [W B] = Fsz_(B,W,Ig9I,sTDV)
[EDGz Jp8l] = pqbi(B,sTDV);
if Jp8l < 1, return, end
EDGz=sortrows(EDGz,-sTDV);
for NUDC = 1:Jp8l
Ohr1 = EDGz(NUDC,1);
IhYx = sum(B == -Ohr1);
if IhYx == 0
if EDGz(NUDC,2) >= 2
[VNmF z7G_] = find(B == Ohr1);
fZfZ = size(VNmF,1);
EIQQ = fZfZ*(fZfZ-1)*.5;
su0f = (1:fZfZ*fZfZ)';
lntc=mod(su0f-1,fZfZ)+1;
Dybm=ceil(su0f/fZfZ);
hygm = (Dybm<lntc);
Dybm = Dybm(hygm);
lntc = lntc(hygm);
LNiu = abs(VNmF(Dybm)-VNmF(lntc)) + abs(z7G_(Dybm)-z7G_(lntc));
dist = [Dybm,lntc,LNiu];
[LNiu oQOA] = sort(dist(:,3));
dist = dist(oQOA,:);
maxstep = min(Ig9I,2*Ohr1+1);
WARv = false;
for E_9b = 1:EIQQ
if dist(E_9b,3) > maxstep+1
break
end
Dybm = dist(E_9b,1);
lntc = dist(E_9b,2);
path = fJ5x(B,[VNmF(Dybm); VNmF(lntc)], [z7G_(Dybm); z7G_(lntc)], -Ohr1, Ig9I, 2*Ohr1);
if size(path,1) > 0
W = [W; path];
B = EI8A(B,path,-Ohr1);
WARv = true;
break
end
end
if ~WARv
continue
end
end
end
[VNmF z7G_] = find(B == Ohr1);
lIP9 = size(VNmF,1);
maxstep = min(Ig9I,Ohr1+1);
for twN_ = 1:lIP9
[vUxj dk4r] = find(B == -Ohr1);
IhYx = size(vUxj,1);
EIQQ = IhYx * (lIP9-twN_+1);
su0f = (1:IhYx*lIP9)';
lntc=mod(su0f-1,lIP9)+1;
Dybm=ceil(su0f/lIP9);
hygm = (lntc>=twN_);
Dybm = Dybm(hygm);
lntc = lntc(hygm);
LNiu = abs(vUxj(Dybm)-VNmF(lntc)) + abs(dk4r(Dybm)-z7G_(lntc));
dist = [Dybm,lntc,LNiu];
[LNiu oQOA] = sort(dist(:,3));
dist = dist(oQOA,:);
JREK = false(lIP9,1);
WARv = false;
for E_9b = 1:EIQQ
if dist(E_9b,3) > maxstep+1
break
end
lntc = dist(E_9b,2);
if JREK(lntc)
randperm(4);
continue
end
Dybm = dist(E_9b,1);
path = fJ5x(B,[vUxj(Dybm); VNmF(lntc)], [dk4r(Dybm); z7G_(lntc)], -Ohr1, Ig9I, 2*Ohr1);
JREK(lntc)=true;
if size(path,1) > 0
W = [W; path];
B = EI8A(B,path,-Ohr1);
WARv = true;
VNmF([twN_ lntc]) = VNmF([lntc twN_]);
z7G_([twN_ lntc]) = z7G_([lntc twN_]);
break
end
end
if ~WARv
break
end
end
end
end
function [nwC2 D_N6] = nDRU(lpB6,B,path)
[bjsx UQl0] = size(B);
nwC2 = lpB6 == 0;
D_N6 = nwC2;
nwC2(:,[1 UQl0]) = false;
D_N6([1 bjsx],:) = false;
for NUDC = 1:size(path,1)
if path(NUDC,1) == path(NUDC,3)
nwC2(path(NUDC,1),path(NUDC,2)) = false;
nwC2(path(NUDC,3),path(NUDC,4)) = false;
end
if path(NUDC,2) == path(NUDC,4)
D_N6(path(NUDC,1),path(NUDC,2)) = false;
D_N6(path(NUDC,3),path(NUDC,4)) = false;
end
end
end
function B = EI8A(B,path,BpFS)
B(path(1,1),path(1,2)) = BpFS;
for NUDC = 1:size(path,1);
B(path(NUDC,3),path(NUDC,4)) = BpFS;
end
end
function path = d08m(pjyC,bHCG,bjsx,cNKE)
path = zeros(cNKE,4);
KYKM = mod(pjyC,bjsx);
zYPY = ceil(pjyC/bjsx);
for twN_ = 1:cNKE
path(twN_,1:2) = [KYKM zYPY];
pjyC = bHCG(pjyC);
KYKM = mod(pjyC,bjsx);
zYPY = ceil(pjyC/bjsx);
path(twN_,3:4) = [KYKM zYPY];
end
end
function path = fJ5x(B,VNmF,z7G_,BpFS,Olzq,dejA)
[bjsx UQl0] = size(B);
bHCG = zeros(bjsx,UQl0);
BFPR = -ones(bjsx,UQl0);
BFPR(VNmF(2),z7G_(2)) = 0;
BFPR(VNmF(1),z7G_(1)) = -2;
BFPR( B == BpFS ) = -2;
YVfM = zeros(bjsx*UQl0,1);
YVfM(1) = VNmF(2) + (z7G_(2)-1)*bjsx;
count = 1;
yTIH = [-1 1 -bjsx bjsx];
mS4r = randperm(4);
for step = 0:min(Olzq,dejA)
if count < 1, break, end
fZfZ = count;
pjyC = YVfM;
count = 0;
for NUDC = 1:fZfZ
rnHz = pjyC(NUDC);
for uLdu=1:4
xQx6 = rnHz + yTIH(mS4r(uLdu));
uWvg = BFPR(xQx6);
if uWvg == -2
bHCG(xQx6) = rnHz;
path = d08m(xQx6,bHCG,bjsx,step+1);
return
end
if uWvg == -1 && B(xQx6) == 0
BFPR(xQx6) = step+1;
bHCG(xQx6) = rnHz;
count = count + 1;
YVfM(count) = xQx6;
end
end
end
end
path = [];
end
function path = XuAs(B,nwC2,D_N6,VNmF,z7G_,BpFS,y8Om,Ig9I,dejA)
[bjsx UQl0] = size(B);
UkQh = false(bjsx,UQl0);
bHCG = zeros(bjsx,UQl0);
BFPR = -ones(bjsx,UQl0);
BFPR(VNmF(1),z7G_(1)) = -2;
BFPR( B == BpFS ) = -2;
maxstep = min((y8Om*27)+Ig9I,dejA+1);
P_Le = zeros(maxstep+28,1);
P_Le(1) = VNmF(2) + (z7G_(2)-1)*bjsx;
yTIH = [-bjsx bjsx -1 1];
for step = 1:maxstep
while P_Le(step)>0
rnHz = P_Le(step);
P_Le(step)=BFPR(rnHz);
for uLdu = 1:4
xQx6 = rnHz + yTIH(uLdu);
uWvg = BFPR(xQx6);
if uWvg==-1
if B(xQx6) == 0
BFPR(xQx6) = P_Le(step+1);
P_Le(step+1) = xQx6;
bHCG(xQx6) = rnHz;
elseif (nwC2(xQx6)&&(uLdu<3)) || (D_N6(xQx6)&&(uLdu>2))
BFPR(xQx6) = P_Le(step+26);
P_Le(step+26) = xQx6;
bHCG(xQx6) = rnHz;
UkQh(xQx6) = true;
end
end
if uWvg==-2
step=step+1;
bHCG(xQx6) = rnHz;
KYKM=mod(xQx6,bjsx);
zYPY=ceil(xQx6/bjsx);
path = zeros(step,4);
twN_ = 0;
while KYKM ~= VNmF(2) || zYPY ~= z7G_(2)
twN_ = twN_ + 1;
path(twN_,1:2) = [KYKM zYPY];
xQx6 = KYKM + (zYPY-1)*bjsx;
W8fM = bHCG(xQx6);
lVdB=mod(W8fM,bjsx);
yYUP=ceil(W8fM/bjsx);
path(twN_,3:4) = [lVdB yYUP];
KYKM = lVdB;
zYPY = yYUP;
if UkQh(KYKM,zYPY)
twN_ = twN_ + 1;
path(twN_,:) = [KYKM zYPY KYKM zYPY];
end
end
path = path(1:twN_,:);
return
end
end
end
end
path = [];
end
function W = ceHI(B)
[W,Ie_4] = h5Lx(B);
MIp8 = 0;
uMC6 = round(mod(B(:),2));
if Ie_4 < 2100
return
end
[pfRf,Yo0h] = size(B);
B = flipud(fliplr(B'));
[CgE5,y2TU] = h5Lx(B);
if Ie_4 > y2TU
W = [pfRf-CgE5(:,2)+1 Yo0h-CgE5(:,1)+1 pfRf-CgE5(:,4)+1 Yo0h-CgE5(:,3)+1];
end
if uMC6~=MIp8; W = zeros(0,4); end
end
function [W,Ie_4] = h5Lx(B)
[hr5f,zjY4]=size(B);
VPL9=nan(hr5f+2,zjY4+2);
VPL9(2:end-1,2:end-1)=B;
BF81 = VPL9;
y8Om = 4;
if size(BF81,2) > 20
Jd3y = 4;
ussU = 8;
Olzq = 12;
else
Jd3y = 3;
ussU = 7;
Olzq = 11;
end
Ie_4 = inf;
rffI = [1 2;2 1];
u4Gj = [1 3;3 1];
YY6c = [3 2 1;1 2 3];
for E_9b = 1:2
if E_9b == 2
[gzw0 UHnT] = pAT6(BF81,Jd3y,rffI(E_9b,:));
[ZIg_ Mkoi] = DvXj(UHnT,gzw0,ussU,u4Gj(E_9b,:));
[EEZF hcgy] = DvXj(Mkoi,ZIg_,Olzq,u4Gj(E_9b,:));
else
[gzw0 UHnT] = pAT6(BF81,4,rffI(E_9b,:));
[EEZF hcgy] = DvXj(UHnT,gzw0,11,u4Gj(E_9b,:));
end
for F_kD = 1:2
if E_9b == 2 && F_kD == 2 && Ie_4 > 2100, return, end
nROc = TiSm(BF81,hcgy,EEZF,y8Om,Olzq,YY6c(F_kD,:))-1;
EeWe = Lxug(B,nROc);
if EeWe <= Ie_4
Ie_4 = EeWe;
W = nROc;
y8Om = y8Om - 1;
end
end
end
if hr5f*zjY4 > 290; return; end
LHdx = sum(W(:,1)==W(:,3)&W(:,2)==W(:,4));
if LHdx <= 4
EDzE = oKNM(B);
PlPH = Lxug(B,EDzE);
if PlPH < Ie_4
W = EDzE;
Ie_4 = PlPH;
end
end
end
function path = yMj_(B,VNmF,z7G_,BpFS,Olzq,dejA)
function path = Twjt(romu,gTwD,HOGO)
JlGW(romu,gTwD) = oFQH(NUDC);
zLHN(romu,gTwD) = F6We(NUDC);
path = zeros(HOGO,4);
for IZ0l = 1:HOGO
path(IZ0l,1:2) = [romu gTwD];
Iuck = JlGW(romu,gTwD);
KNA3 = zLHN(romu,gTwD);
path(IZ0l,3:4) = [Iuck KNA3];
romu = Iuck;
gTwD = KNA3;
end
end
[bjsx UQl0] = size(B);
JlGW = zeros(bjsx,UQl0);
zLHN = zeros(bjsx,UQl0);
BFPR = -ones(bjsx,UQl0);
BFPR(VNmF(2),z7G_(2)) = 0;
BFPR(VNmF(1),z7G_(1)) = -2;
BFPR( B == BpFS ) = -2;
TpPm = zeros(bjsx*UQl0,1);
hjJH = zeros(bjsx*UQl0,1);
count = 1;
TpPm(1) = VNmF(2);
hjJH(1) = z7G_(2);
ahBD=[-1 1 0 0];
alR_=[0 0 -1 1];
for step = 0:min(Olzq,dejA)
if count < 1, break, end
fZfZ = count;
oFQH = TpPm(1:fZfZ);
F6We = hjJH(1:fZfZ);
count = 0;
for NUDC = 1:fZfZ
TkL2 = F6We(NUDC);
rnHz = oFQH(NUDC);
for uLdu=1:4
romu = rnHz + ahBD(uLdu);
gTwD = TkL2 + alR_(uLdu);
xQx6 = romu + (gTwD-1)*bjsx;
uWvg = BFPR(xQx6);
if uWvg == -2
path = Twjt(romu,gTwD,step+1);
return
elseif uWvg == -1 && B(xQx6) == 0
BFPR(xQx6) = step+1;
JlGW(xQx6) = rnHz;
zLHN(xQx6) = TkL2;
count = count + 1; TpPm(count) = romu; hjJH(count) = gTwD;
end
end
end
end
path = [];
end
function Hq44 = oKNM(lntc)
Ohr1 = unique(lntc);
Ohr1(1) = [];
XlqM = zeros(size(Ohr1));
for NUDC = 1:length(XlqM)
XlqM(NUDC) = nnz(Ohr1(NUDC) == lntc(:));
end
for NUDC = 1:length(XlqM)
if XlqM(NUDC) == 1
lntc(Ohr1(NUDC) == lntc(:)) = -1;
end
end
txWw = zeros(size(lntc)+2);
cJa7 = repmat(-1,size(txWw));
cJa7(2:end-1,2:end-1) = lntc;
Hq44 = [];
[poMo, QP3D] = find(cJa7>0);
LNiu = (size(cJa7,1)/2 - poMo).^2 + (size(cJa7,2)/2 - QP3D).^2;
[LNiu, order] = sort(LNiu);
order = order';
for Jp8l = 1:length(poMo)-1
GHy0 = 0;
bIIf = 32;
for NUDC = order
if txWw(poMo(NUDC), QP3D(NUDC))
continue
end
[BRL7, zhkm, t047] = gEqm(cJa7, txWw, poMo(NUDC), QP3D(NUDC), bIIf);
if BRL7 > GHy0
GHy0 = BRL7;
pOt9 = zhkm;
bIIf = t047;
if bIIf == 1
break
end
end
end
if GHy0 == 0
Hq44 = Hq44 - 1;
return
end
txWw = EI8A(txWw, pOt9, cJa7(pOt9(1,1), pOt9(1,2)));
cJa7 = EI8A(cJa7, pOt9, cJa7(pOt9(1,1), pOt9(1,2)));
Hq44 = [Hq44; pOt9];
end
Hq44 = Hq44 - 1;
end
function [GHy0, pOt9, bIIf] = gEqm(lntc, txWw, pjyC, F6We, LIHa)
GHy0 = 0;
pOt9 = [];
IZ0l = [1 -1 0 0];
Jp8l = [0 0 1 -1];
if ~any(txWw(:)==lntc(pjyC,F6We))
txWw = lntc;
end
cJa7 = lntc;
cJa7(cJa7>0) = -1;
cJa7(pjyC,F6We) = 1;
bIIf = Inf;
Ohr1 = lntc(pjyC,F6We);
for NUDC = 1:LIHa-2
[poMo, QP3D] = find(cJa7==NUDC);
for XlqM = 1:length(poMo)
for ED97 = 1:4
inAF = poMo(XlqM) + IZ0l(ED97);
md2f = QP3D(XlqM) + Jp8l(ED97);
if txWw(inAF,md2f) == Ohr1 && ~(inAF == pjyC && md2f == F6We)
bIIf = NUDC;
break
end
EGR2 = cJa7(inAF,md2f);
if EGR2 == 0
cJa7(inAF,md2f) = NUDC+1;
end
end
if bIIf < Inf
break
end
end
if bIIf < Inf
break
end
end
if bIIf == Inf
return
end
GHy0 = lntc(pjyC,F6We) - bIIf;
if bIIf == 1
pOt9 = [pjyC, F6We, inAF, md2f];
return
end
pOt9 = zeros(bIIf,4);
for step = bIIf:-1:1
for ED97 = 1:4
IIxW = inAF + IZ0l(ED97);
CD3h = md2f + Jp8l(ED97);
if cJa7(IIxW, CD3h) == step
break
end
end
pOt9(step,:) = [IIxW, CD3h, inAF, md2f];
inAF = IIxW;
md2f = CD3h;
end
end
function [W B] = pAT6(B,Olzq,sTDV)
W = [];
[EDGz Jp8l] = pqbi(B,sTDV);
if Jp8l < 1
return
end
EDGz=sortrows(EDGz,-sTDV);
for NUDC = 1:Jp8l
if EDGz(NUDC,2) >= 2
Ohr1 = EDGz(NUDC,1);
[VNmF z7G_] = find(B == Ohr1);
fZfZ = size(VNmF,1);
EIQQ = fZfZ*(fZfZ-1)/2;
dist = zeros(EIQQ,3);
E_9b = 0;
for Dybm = 1:fZfZ
for lntc = (Dybm+1):fZfZ
E_9b = E_9b + 1;
dist(E_9b,1) = Dybm;
dist(E_9b,2) = lntc;
dist(E_9b,3) = abs(VNmF(Dybm)-VNmF(lntc)) + abs(z7G_(Dybm)-z7G_(lntc));
end
end
[LNiu oQOA] = sort(dist(:,3));
dist = dist(oQOA,:);
RhyI = reshape(dist(:,1:2)',[],1);
M_Od = 0;
OPb3 = 1;
R0Dc = false(fZfZ,1);
for NUDC=1:fZfZ
qg4O = find( ~R0Dc(RhyI(OPb3:end)) , 1 , 'first');
if isempty(qg4O)
break
end
Dybm = RhyI(qg4O);
Distance = abs(VNmF([1:Dybm-1,Dybm+1:end]')-VNmF(Dybm)) + abs(z7G_([1:Dybm-1,Dybm+1:end]')-z7G_(Dybm));
if max(Distance)>Olzq-1
break
end
path = XHio(B,VNmF(Dybm),z7G_(Dybm),VNmF([1:Dybm-1,Dybm+1:end]'),z7G_([1:Dybm-1,Dybm+1:end]'), -Ohr1, Olzq, 2*Ohr1);
if size(path,1) > 0
W = [W; path];
B = EI8A(B,path,-Ohr1);
M_Od = 2;
break
end
end
if M_Od < 2
continue
end
for IZ0l = 3:fZfZ
[vUxj dk4r] = find(B == -Ohr1);
[VNmF z7G_] = find(B == Ohr1);
[Gby_,F80Q] = meshgrid(VNmF,vUxj);
[s4SB,TX_T] = meshgrid(VNmF,vUxj);
Distance = abs(Gby_-F80Q) + abs(s4SB-TX_T);
if max(Distance(:))>Olzq-1
break
end
path = XHio(B,vUxj,dk4r,VNmF,z7G_, -Ohr1, Olzq, 2*Ohr1);
if size(path,1) > 0
W = [W; path];
B = EI8A(B,path,-Ohr1);
WARv = true;
else
break
end
end
end
end
end
function [W B] = DvXj(B,W,cKjj,sTDV)
[EDGz Jp8l] = pqbi(B,sTDV);
if Jp8l < 1, return, end
EDGz=sortrows(EDGz,-sTDV);
for NUDC = 1:Jp8l
Ohr1 = EDGz(NUDC,1);
IhYx = sum(B == -Ohr1);
if IhYx == 0
if EDGz(NUDC,2) >= 2
[VNmF z7G_] = find(B == Ohr1);
fZfZ = size(VNmF,1);
EIQQ = fZfZ*(fZfZ-1)/2;
dist = zeros(EIQQ,3);
E_9b = 0;
for Dybm = 1:fZfZ
for lntc = (Dybm+1):fZfZ
E_9b = E_9b + 1;
dist(E_9b,1) = Dybm;
dist(E_9b,2) = lntc;
dist(E_9b,3) = abs(VNmF(Dybm)-VNmF(lntc)) + abs(z7G_(Dybm)-z7G_(lntc));
end
end
[LNiu oQOA] = sort(dist(:,3));
dist = dist(oQOA,:);
maxstep = min(cKjj,2*Ohr1+1);
WARv = false;
for E_9b = 1:EIQQ
if dist(E_9b,3) > maxstep+1
break
end
Dybm = dist(E_9b,1);
lntc = dist(E_9b,2);
path = yMj_(B,[VNmF(Dybm); VNmF(lntc)], [z7G_(Dybm); z7G_(lntc)], -Ohr1, cKjj, 2*Ohr1);
if size(path,1) > 0
W = [W; path];
B = EI8A(B,path,-Ohr1);
WARv = true;
break
end
end
if ~WARv
continue
end
end
end
[VNmF z7G_] = find(B == Ohr1);
WoY_ = size(VNmF,1);
maxstep = min(cKjj,Ohr1+1);
for IZ0l = 1:WoY_
[vUxj dk4r] = find(B == -Ohr1);
[VNmF z7G_] = find(B == Ohr1);
WARv = false;
path = XHio(B,vUxj,dk4r,VNmF,z7G_, -Ohr1, cKjj, Ohr1);
if size(path,1) > 0
W = [W; path];
B = EI8A(B,path,-Ohr1);
WARv = true;
end
if ~WARv
break
end
end
end
end
function [W B] = TiSm(VPL9,B,W,y8Om,cKjj,sTDV)
function DG15()
for Hq44 = 1:size(path,1);
if path(Hq44,1) == path(Hq44,3)
uOmY(path(Hq44,1),path(Hq44,2)) = false;
uOmY(path(Hq44,3),path(Hq44,4)) = false;
if path(Hq44,2) == path(Hq44,4)
B(path(Hq44,1),path(Hq44,2)) = -9999;
end
end
if path(Hq44,2) == path(Hq44,4)
B4fa(path(Hq44,1),path(Hq44,2)) = false;
B4fa(path(Hq44,3),path(Hq44,4)) = false;
end
end
end
[uOmY B4fa] = nDRU(VPL9,B,W);
[EDGz Jp8l] = pqbi(B,sTDV);
if Jp8l < 1, return, end
EDGz=sortrows(EDGz,-sTDV);
for NUDC = 1:Jp8l
Ohr1 = EDGz(NUDC,1);
IhYx = sum(B == -Ohr1);
if IhYx == 0
if EDGz(NUDC,2) >= 2
[VNmF z7G_] = find(B == Ohr1);
fZfZ = size(VNmF,1);
EIQQ = fZfZ*(fZfZ-1)/2;
dist = zeros(EIQQ,3);
E_9b = 0;
for Dybm = 1:fZfZ
for lntc = (Dybm+1):fZfZ
E_9b = E_9b + 1;
dist(E_9b,1) = Dybm;
dist(E_9b,2) = lntc;
dist(E_9b,3) = abs(VNmF(Dybm)-VNmF(lntc)) + abs(z7G_(Dybm)-z7G_(lntc));
end
end
[LNiu oQOA] = sort(dist(:,3));
dist = dist(oQOA,:);
maxstep = min((y8Om*25)+cKjj,2*Ohr1+1);
WARv = false;
for E_9b = 1:EIQQ
if dist(E_9b,3) > maxstep+1
break
end
Dybm = dist(E_9b,1);
lntc = dist(E_9b,2);
path = XuAs(B,uOmY,B4fa,[VNmF(Dybm); VNmF(lntc)], [z7G_(Dybm); z7G_(lntc)], -Ohr1, y8Om, cKjj, 2*Ohr1);
if size(path,1) > 0
W = [W; path];
B = EI8A(B,path,-Ohr1);
DG15();
WARv = true;
break
end
end
if ~WARv
continue
end
end
end
[VNmF z7G_] = find(B == Ohr1);
WoY_ = size(VNmF,1);
maxstep = min((y8Om*25)+cKjj,Ohr1+1);
for IZ0l = 1:WoY_
[vUxj dk4r] = find(B == -Ohr1);
[VNmF z7G_] = find(B == Ohr1);
WARv = false;
path = FZQd(B,uOmY,B4fa,vUxj,dk4r,VNmF,z7G_, -Ohr1, y8Om, cKjj, Ohr1);
if size(path,1) > 0
W = [W; path];
B = EI8A(B,path,-Ohr1);
DG15();
WARv = true;
end
if ~WARv
break
end
end
end
end
function path = FZQd(B,nwC2,D_N6,rowS,colS,jDjS,njGE,BpFS,y8Om,Ig9I,dejA)
function path = d08m(xQx6,step)
bHCG(xQx6) = rnHz;
path = zeros(step,4);
twN_ = 0;
SnyV = 0;
HnM3 = zeros(step,1);
kHeq = zeros(step,1);
dNLR = zeros(step,1);
while isempty(find(cRZ9==xQx6,1))
twN_ = twN_ + 1;
HnM3(twN_,1) = xQx6;
W8fM = bHCG(xQx6);
kHeq(twN_,1) = W8fM;
xQx6 = W8fM;
if UkQh(xQx6)
SnyV = SnyV + 1;
dNLR(SnyV,1) = xQx6;
end
end
HnM3 = [ HnM3(1:twN_,:) ; dNLR(1:SnyV,1) ];
kHeq = [ kHeq(1:twN_,:) ; dNLR(1:SnyV,1) ];
path = [ mod(HnM3,bjsx) , ceil(HnM3/bjsx) , mod(kHeq,bjsx) , ceil(kHeq/bjsx) ];
end
[bjsx UQl0] = size(B);
UkQh = false(bjsx,UQl0);
bHCG = zeros(bjsx,UQl0);
BFPR = -ones(bjsx,UQl0);
cRZ9 = rowS + (colS-1)*bjsx;
BFPR(cRZ9) = 0;
BFPR(jDjS + (njGE-1)*bjsx) = -2;
maxstep = min((y8Om*25)+Ig9I,dejA+1);
qRE7 = zeros(maxstep+26,1);
bK8b = [-1 1];
for step = 0:maxstep
if step == 0
pjyC = cRZ9;
elseif qRE7(step) == 0
continue
else
pjyC = find(BFPR == step);
end
fZfZ = numel(pjyC);
for NUDC = 1:fZfZ
rnHz = pjyC(NUDC);
for oRDF = 1:2
xQx6 = rnHz + bK8b(oRDF) * bjsx;
uWvg = BFPR(xQx6);
if uWvg == -2
path = d08m(xQx6,step+1);
return
elseif uWvg == -1
if B(xQx6) == 0
BFPR(xQx6) = step+1; qRE7(step+1) = 1;
bHCG(xQx6) = rnHz;
elseif nwC2(xQx6)
BFPR(xQx6) = step+26; qRE7(step+26) = 1;
bHCG(xQx6) = rnHz;
UkQh(xQx6) = true;
end
end
end
for oRDF = 1:2
xQx6 = rnHz + bK8b(oRDF);
uWvg = BFPR(xQx6);
if uWvg == -2
path = d08m(xQx6,step+1);
return
elseif uWvg == -1
if B(xQx6) == 0
BFPR(xQx6) = step+1; qRE7(step+1) = 1;
bHCG(xQx6) = rnHz;
elseif D_N6(xQx6)
BFPR(xQx6) = step+26; qRE7(step+26) = 1;
bHCG(xQx6) = rnHz;
UkQh(xQx6) = true;
end
end
end
end
end
path = zeros(0,4);
end
function path = XHio(B,rowS,colS,TuQN,rPt2,BpFS,Olzq,dejA)
[bjsx UQl0] = size(B);
JlGW = zeros(bjsx,UQl0);
zLHN = zeros(bjsx,UQl0);
BFPR = -ones(bjsx,UQl0);
BFPR(rowS+(colS-1)*bjsx) = 0;
BFPR(TuQN+(rPt2-1)*bjsx) = -2;
YVfM = zeros(bjsx*UQl0,1);
hjJH = zeros(bjsx*UQl0,1);
count = numel(rowS);
YVfM(1:count) = rowS;
hjJH(1:count) = colS;
ahBD=[-1 1 0 0];
alR_=[0 0 -1 1];
for step = 0:min(Olzq,dejA)
if count < 1, break, end
fZfZ = count;
oFQH = YVfM(1:fZfZ);
F6We = hjJH(1:fZfZ);
count = 0;
for NUDC = 1:fZfZ
TkL2 = F6We(NUDC);
rnHz = oFQH(NUDC);
for uLdu=1:4
romu = rnHz + ahBD(uLdu);
gTwD = TkL2 + alR_(uLdu);
xQx6 = romu + (gTwD-1)*bjsx;
uWvg = BFPR(xQx6);
if uWvg == -2
HOGO=step+1;
JlGW(romu,gTwD) = oFQH(NUDC);
zLHN(romu,gTwD) = F6We(NUDC);
path = zeros(HOGO,4);
for IZ0l = 1:HOGO
path(IZ0l,1:2) = [romu gTwD];
Iuck = JlGW(romu,gTwD);
KNA3 = zLHN(romu,gTwD);
path(IZ0l,3:4) = [Iuck KNA3];
romu = Iuck;
gTwD = KNA3;
end
return
end
if uWvg == -1 && B(xQx6) == 0
BFPR(xQx6) = step+1;
JlGW(xQx6) = rnHz;
zLHN(xQx6) = TkL2;
count = count + 1; YVfM(count) = romu; hjJH(count) = gTwD;
end
end
end
end
path = [];
end
|