| Code: | function W = solv(B)
psqq=40617;
Qcxt = rand(43,1);
W=vQFM(B);
mF0u = I0Ef(B,W);
[ZGlW,tM5M] = size(B);
z5GL = B(ZGlW:-1:1,:);
z5GL = z5GL.';
[IUgZ,NhZc] = A2F5(z5GL,[1 2],[1 2],4*ZGlW*tM5M);
if mF0u > NhZc
W = [ZGlW-IUgZ(:,2)+1 IUgZ(:,1) ZGlW-IUgZ(:,4)+1 IUgZ(:,3)];
mF0u=NhZc;
end
FSfw=rand('state');
rand(psqq,1);
if mF0u>1000
[IUgZ,NhZc] = A2F5(z5GL,[1 2],[1 2],4*ZGlW*tM5M);
if mF0u > NhZc
W = [ZGlW-IUgZ(:,2)+1 IUgZ(:,1) ZGlW-IUgZ(:,4)+1 IUgZ(:,3)];
mF0u=NhZc;
end
end
rand('state',FSfw);
end
function [W,mF0u] = A2F5(SSG4,rP8f,kae3,o8Os)
[aSyo,Iigd]=size(SSG4);
p9n7= -ones(aSyo+2,Iigd+2);
p9n7(2:end-1,2:end-1)=SSG4;
Z5io = p9n7;
vDl3 = 4;
if size(Z5io,2) > 20
DgX_ = 4;
iQ1g = 8;
nZfY = 18;
else
DgX_ = 3;
iQ1g = 7;
nZfY = 13;
end
mF0u = inf;
eC_u = [1 2;2 1];
bzcw = [1 3;3 1];
oFAl = [3 2 1;1 2 3];
for kQrw = rP8f
if kQrw == 2
[iOBh cbWI] = qi2o(Z5io,DgX_,eC_u(kQrw,:));
[YQj_ T3hS] = OsIB(cbWI,iOBh,iQ1g,bzcw(kQrw,:));
[Vqrs oDjQ] = OsIB(T3hS,YQj_,nZfY,bzcw(kQrw,:));
else
[iOBh cbWI] = qi2o(Z5io,4,eC_u(kQrw,:));
[Vqrs oDjQ] = OsIB(cbWI,iOBh,11,bzcw(kQrw,:));
end
for CfVo = kae3
sXx8 = PikE(Z5io,oDjQ,Vqrs,vDl3,nZfY,oFAl(CfVo,:))-1;
cyx7 = I0Ef(SSG4,sXx8);
if cyx7 <= mF0u
mF0u = cyx7;
W = sXx8;
vDl3 = vDl3 - 1;
end
end
end
end
function Uslx = I0Ef(B,W)
aSyo=size(B,1);
B(W(:,1)+(W(:,2)-1)*aSyo)=0;
B(W(:,3)+(W(:,4)-1)*aSyo)=0;
Uslx=sum(B(:))+size(W,1)+sum(W(:,1)==W(:,3)&W(:,2)==W(:,4))*24;
end
function [LVLs wqrx] = jur9(B,jfz7)
m94B = sort(B(B>0),'descend');
et4B = size(m94B,1);
if et4B < 1
LVLs = [];
wqrx = 0;
return
end
lDip=m94B(diff([0;m94B])~=0);
LVLs = zeros(nnz(lDip),3);
ASVG=histc(m94B,lDip(end:-1:1));
LVLs(:,1)=lDip;
LVLs(:,2)=ASVG(end:-1:1);
wqrx=nnz(lDip);
if jfz7 < 3, return, end
for Wbee = 1:wqrx
if LVLs(Wbee,2) >= 2
rhLK = LVLs(Wbee,1);
[U_4G Bfxz] = find(B == rhLK);
IMWN = 0;
DiOr = size(U_4G,1);
IMWN=sum(abs(diff(U_4G))+abs(diff(Bfxz)));
LVLs(Wbee,3) = LVLs(Wbee,2)*rhLK - 0.85 * IMWN;
end
end
end
function [W B] = qi2o(B,nZfY,jfz7)
W = [];
[LVLs wqrx] = jur9(B,jfz7);
if wqrx < 1
return
end
LVLs=sortrows(LVLs,-jfz7);
for Wbee = 1:wqrx
if LVLs(Wbee,2) >= 2
rhLK = LVLs(Wbee,1);
[U_4G Bfxz] = find(B == rhLK);
DiOr = size(U_4G,1);
BDjo = DiOr*(DiOr-1)/2;
dist = zeros(BDjo,3);
[pUHo EiaE]=find(tril(ones(DiOr),-1));
dist(:,1)=EiaE;
dist(:,2)=pUHo;
dist(:,3)=abs(Bfxz(pUHo)-Bfxz(EiaE))+abs(U_4G(pUHo)-U_4G(EiaE));
[IMWN blcF] = sort(dist(:,3));
dist = dist(blcF,:);
et4B = 0;
for kQrw = 1:BDjo
if dist(kQrw,3) > nZfY+1
break
end
PUeo = dist(kQrw,1);
Y2fY = dist(kQrw,2);
path = uIAl(B,[U_4G(PUeo); U_4G(Y2fY)], [Bfxz(PUeo); Bfxz(Y2fY)], -rhLK, nZfY, 2*rhLK);
if size(path,1) > 0
W = [W; path];
B = GEkJ(B,path,-rhLK);
et4B = 2;
edit = [1:(PUeo-1) (PUeo+1):(Y2fY-1) (Y2fY+1):DiOr];
U_4G = [U_4G(PUeo); U_4G(Y2fY); U_4G(edit)];
Bfxz = [Bfxz(PUeo); Bfxz(Y2fY); Bfxz(edit)];
break
else
end
end
if et4B < 2
continue
end
for N1pS = 3:DiOr
[zZow vKRV] = find(B == -rhLK);
JO30 = size(zZow,1);
BDjo = JO30 * (DiOr - et4B);
dist = zeros(BDjo,3);
kQrw = 0;
for PUeo = 1:JO30
for Y2fY = (et4B+1):DiOr
kQrw = kQrw + 1;
dist(kQrw,1) = PUeo;
dist(kQrw,2) = Y2fY;
dist(kQrw,3) = abs(zZow(PUeo)-U_4G(Y2fY)) + abs(vKRV(PUeo)-Bfxz(Y2fY));
end
end
[IMWN blcF] = sort(dist(:,3));
dist = dist(blcF,:);
JOTH = false(DiOr,1);
j0g6 = false;
for kQrw = 1:BDjo
if dist(kQrw,3) > nZfY+1
break
end
Y2fY = dist(kQrw,2);
if JOTH(Y2fY)
randperm(4);
continue
end
PUeo = dist(kQrw,1);
path = uIAl(B,[zZow(PUeo); U_4G(Y2fY)], [vKRV(PUeo); Bfxz(Y2fY)], -rhLK, nZfY, rhLK);
JOTH(Y2fY)=true;
if size(path,1) > 0
W = [W; path];
B = GEkJ(B,path,-rhLK);
et4B = et4B + 1;
j0g6 = true;
U_4G([N1pS Y2fY]) = U_4G([Y2fY N1pS]);
Bfxz([N1pS Y2fY]) = Bfxz([Y2fY N1pS]);
break
end
end
if ~j0g6
break
end
end
end
end
end
function [W B] = OsIB(B,W,wGCf,jfz7)
[LVLs wqrx] = jur9(B,jfz7);
if wqrx < 1, return, end
LVLs=sortrows(LVLs,-jfz7);
for Wbee = 1:wqrx
rhLK = LVLs(Wbee,1);
JO30 = sum(B == -rhLK);
if JO30 == 0
if LVLs(Wbee,2) >= 2
[U_4G Bfxz] = find(B == rhLK);
DiOr = size(U_4G,1);
BDjo = DiOr*(DiOr-1)*.5;
dist = zeros(BDjo,3);
kQrw = 0;
for PUeo = 1:DiOr
for Y2fY = (PUeo+1):DiOr
kQrw = kQrw + 1;
dist(kQrw,1) = PUeo;
dist(kQrw,2) = Y2fY;
dist(kQrw,3) = abs(U_4G(PUeo)-U_4G(Y2fY)) + abs(Bfxz(PUeo)-Bfxz(Y2fY));
end
end
[IMWN blcF] = sort(dist(:,3));
dist = dist(blcF,:);
maxstep = min(wGCf,2*rhLK+1);
j0g6 = false;
for kQrw = 1:BDjo
if dist(kQrw,3) > maxstep+1
break
end
PUeo = dist(kQrw,1);
Y2fY = dist(kQrw,2);
path = uIAl(B,[U_4G(PUeo); U_4G(Y2fY)], [Bfxz(PUeo); Bfxz(Y2fY)], -rhLK, wGCf, 2*rhLK);
if size(path,1) > 0
W = [W; path];
B = GEkJ(B,path,-rhLK);
j0g6 = true;
break
end
end
if ~j0g6
continue
end
end
end
[U_4G Bfxz] = find(B == rhLK);
C5cx = size(U_4G,1);
maxstep = min(wGCf,rhLK+1);
for N1pS = 1:C5cx
[zZow vKRV] = find(B == -rhLK);
JO30 = size(zZow,1);
BDjo = JO30 * (C5cx-N1pS+1);
dist = zeros(BDjo,3);
kQrw = 0;
for PUeo = 1:JO30
for Y2fY = N1pS:C5cx
kQrw = kQrw + 1;
dist(kQrw,1) = PUeo;
dist(kQrw,2) = Y2fY;
dist(kQrw,3) = abs(zZow(PUeo)-U_4G(Y2fY)) + abs(vKRV(PUeo)-Bfxz(Y2fY));
end
end
[IMWN blcF] = sort(dist(:,3));
dist = dist(blcF,:);
JOTH = false(C5cx,1);
j0g6 = false;
for kQrw = 1:BDjo
if dist(kQrw,3) > maxstep+1
break
end
Y2fY = dist(kQrw,2);
if JOTH(Y2fY)
randperm(4);
continue
end
PUeo = dist(kQrw,1);
path = uIAl(B,[zZow(PUeo); U_4G(Y2fY)], [vKRV(PUeo); Bfxz(Y2fY)], -rhLK, wGCf, 2*rhLK);
JOTH(Y2fY)=true;
if size(path,1) > 0
W = [W; path];
B = GEkJ(B,path,-rhLK);
j0g6 = true;
U_4G([N1pS Y2fY]) = U_4G([Y2fY N1pS]);
Bfxz([N1pS Y2fY]) = Bfxz([Y2fY N1pS]);
break
end
end
if ~j0g6
break
end
end
end
end
function [UVzS x3jr] = t4TE(p9n7,B,path)
[ma8P UHnc] = size(B);
UVzS = p9n7 == 0;
x3jr = UVzS;
UVzS(:,[1 UHnc]) = false;
x3jr([1 ma8P],:) = false;
for Wbee = 1:size(path,1)
if path(Wbee,1) == path(Wbee,3)
UVzS(path(Wbee,1),path(Wbee,2)) = false;
UVzS(path(Wbee,3),path(Wbee,4)) = false;
end
if path(Wbee,2) == path(Wbee,4)
x3jr(path(Wbee,1),path(Wbee,2)) = false;
x3jr(path(Wbee,3),path(Wbee,4)) = false;
end
end
end
function B = GEkJ(B,path,JuCX)
B(path(1,1),path(1,2)) = JuCX;
for Wbee = 1:size(path,1);
B(path(Wbee,3),path(Wbee,4)) = JuCX;
end
end
function path = M7Vi(bt8q,cECH,ma8P,wb3r)
path = zeros(wb3r,4);
zxLY = mod(bt8q,ma8P);
ZbWE = ceil(bt8q/ma8P);
for N1pS = 1:wb3r
path(N1pS,1:2) = [zxLY ZbWE];
bt8q = cECH(bt8q);
zxLY = mod(bt8q,ma8P);
ZbWE = ceil(bt8q/ma8P);
path(N1pS,3:4) = [zxLY ZbWE];
end
end
function path = uIAl(B,U_4G,Bfxz,JuCX,nZfY,bQjT)
[ma8P UHnc] = size(B);
cECH = zeros(ma8P,UHnc);
URW0 = -ones(ma8P,UHnc);
URW0(U_4G(2),Bfxz(2)) = 0;
URW0(U_4G(1),Bfxz(1)) = -2;
URW0( B == JuCX ) = -2;
i6HE = zeros(ma8P*UHnc,1);
i6HE(1) = U_4G(2) + (Bfxz(2)-1)*ma8P;
count = 1;
MI2B = [-1 1 -ma8P ma8P];
XvRd = randperm(4);
for step = 0:min(nZfY,bQjT)
if count < 1, break, end
DiOr = count;
bt8q = i6HE;
count = 0;
for Wbee = 1:DiOr
U9nT = bt8q(Wbee);
for nsnP=1:4
z8UH = U9nT + MI2B(XvRd(nsnP));
UZ4K = URW0(z8UH);
if UZ4K == -2
cECH(z8UH) = U9nT;
path = M7Vi(z8UH,cECH,ma8P,step+1);
return
end
if UZ4K == -1 && B(z8UH) == 0
URW0(z8UH) = step+1;
cECH(z8UH) = U9nT;
count = count + 1;
i6HE(count) = z8UH;
end
end
end
end
path = [];
end
function path = HZE7(B,UVzS,x3jr,U_4G,Bfxz,JuCX,vDl3,wGCf,bQjT)
[ma8P UHnc] = size(B);
EOE4 = false(ma8P,UHnc);
cECH = zeros(ma8P,UHnc);
URW0 = -ones(ma8P,UHnc);
URW0(U_4G(1),Bfxz(1)) = -2;
URW0( B == JuCX ) = -2;
maxstep = min((vDl3*27)+wGCf,bQjT+1);
cVsG = zeros(maxstep+28,1);
cVsG(1) = U_4G(2) + (Bfxz(2)-1)*ma8P;
MI2B = [-ma8P ma8P -1 1];
for step = 1:maxstep
while cVsG(step)>0
U9nT = cVsG(step);
cVsG(step)=URW0(U9nT);
for nsnP = 1:4
z8UH = U9nT + MI2B(nsnP);
UZ4K = URW0(z8UH);
if UZ4K==-1
if B(z8UH) == 0
URW0(z8UH) = cVsG(step+1);
cVsG(step+1) = z8UH;
cECH(z8UH) = U9nT;
elseif (UVzS(z8UH)&&(nsnP<3)) || (x3jr(z8UH)&&(nsnP>2))
URW0(z8UH) = cVsG(step+26);
cVsG(step+26) = z8UH;
cECH(z8UH) = U9nT;
EOE4(z8UH) = true;
end
end
if UZ4K==-2
step=step+1;
cECH(z8UH) = U9nT;
zxLY=mod(z8UH,ma8P);
ZbWE=ceil(z8UH/ma8P);
path = zeros(step,4);
N1pS = 0;
while zxLY ~= U_4G(2) || ZbWE ~= Bfxz(2)
N1pS = N1pS + 1;
path(N1pS,1:2) = [zxLY ZbWE];
z8UH = zxLY + (ZbWE-1)*ma8P;
IYqk = cECH(z8UH);
WynI=mod(IYqk,ma8P);
pzrE=ceil(IYqk/ma8P);
path(N1pS,3:4) = [WynI pzrE];
zxLY = WynI;
ZbWE = pzrE;
if EOE4(zxLY,ZbWE)
N1pS = N1pS + 1;
path(N1pS,:) = [zxLY ZbWE zxLY ZbWE];
end
end
path = path(1:N1pS,:);
return
end
end
end
end
path = [];
end
function W = vQFM(B)
[W,mF0u] = fgJL(B);
t1Sg = 0;
c9w2 = round(mod(B(:),2));
if mF0u < 2100
return
end
[wYLJ,TBpL] = size(B);
B = flipud(fliplr(B'));
[APx0,dIhC] = fgJL(B);
if mF0u > dIhC
W = [wYLJ-APx0(:,2)+1 TBpL-APx0(:,1)+1 wYLJ-APx0(:,4)+1 TBpL-APx0(:,3)+1];
end
if c9w2~=t1Sg; W = zeros(0,4); end
end
function [W,mF0u] = fgJL(B)
[aSyo,Iigd]=size(B);
iIuA=nan(aSyo+2,Iigd+2);
iIuA(2:end-1,2:end-1)=B;
Z5io = iIuA;
vDl3 = 4;
if size(Z5io,2) > 20
DgX_ = 4;
iQ1g = 8;
nZfY = 12;
else
DgX_ = 3;
iQ1g = 7;
nZfY = 11;
end
mF0u = inf;
eC_u = [1 2;2 1];
bzcw = [1 3;3 1];
oFAl = [3 2 1;1 2 3];
for kQrw = 1:2
if kQrw == 2
[iOBh cbWI] = Z9j_(Z5io,DgX_,eC_u(kQrw,:));
[YQj_ T3hS] = BPUC(cbWI,iOBh,iQ1g,bzcw(kQrw,:));
[Vqrs oDjQ] = BPUC(T3hS,YQj_,nZfY,bzcw(kQrw,:));
else
[iOBh cbWI] = Z9j_(Z5io,4,eC_u(kQrw,:));
[Vqrs oDjQ] = BPUC(cbWI,iOBh,11,bzcw(kQrw,:));
end
for CfVo = 1:2
if kQrw == 2 && CfVo == 2 && mF0u > 2100, return, end
sXx8 = PikE(Z5io,oDjQ,Vqrs,vDl3,nZfY,oFAl(CfVo,:))-1;
cyx7 = I0Ef(B,sXx8);
if cyx7 <= mF0u
mF0u = cyx7;
W = sXx8;
vDl3 = vDl3 - 1;
end
end
end
if aSyo*Iigd > 290; return; end
x_J8 = sum(W(:,1)==W(:,3)&W(:,2)==W(:,4));
if x_J8 <= 4
qhBl = yM1q(B);
cYGu = I0Ef(B,qhBl);
if cYGu < mF0u
W = qhBl;
mF0u = cYGu;
end
end
end
function path = NY46(B,U_4G,Bfxz,JuCX,nZfY,bQjT)
function path = Ma4z(jaqu,AMXi,xi1R)
HIeZ(jaqu,AMXi) = ERAE(Wbee);
rUCa(jaqu,AMXi) = W1aD(Wbee);
path = zeros(xi1R,4);
for OV6E = 1:xi1R
path(OV6E,1:2) = [jaqu AMXi];
xcHW = HIeZ(jaqu,AMXi);
vZbB = rUCa(jaqu,AMXi);
path(OV6E,3:4) = [xcHW vZbB];
jaqu = xcHW;
AMXi = vZbB;
end
end
[ma8P UHnc] = size(B);
HIeZ = zeros(ma8P,UHnc);
rUCa = zeros(ma8P,UHnc);
URW0 = -ones(ma8P,UHnc);
URW0(U_4G(2),Bfxz(2)) = 0;
URW0(U_4G(1),Bfxz(1)) = -2;
URW0( B == JuCX ) = -2;
IVni = zeros(ma8P*UHnc,1);
nyuo = zeros(ma8P*UHnc,1);
count = 1;
IVni(1) = U_4G(2);
nyuo(1) = Bfxz(2);
J0Mg=[-1 1 0 0];
ah92=[0 0 -1 1];
for step = 0:min(nZfY,bQjT)
if count < 1, break, end
DiOr = count;
ERAE = IVni(1:DiOr);
W1aD = nyuo(1:DiOr);
count = 0;
for Wbee = 1:DiOr
gjUR = W1aD(Wbee);
U9nT = ERAE(Wbee);
for nsnP=1:4
jaqu = U9nT + J0Mg(nsnP);
AMXi = gjUR + ah92(nsnP);
z8UH = jaqu + (AMXi-1)*ma8P;
UZ4K = URW0(z8UH);
if UZ4K == -2
path = Ma4z(jaqu,AMXi,step+1);
return
elseif UZ4K == -1 && B(z8UH) == 0
URW0(z8UH) = step+1;
HIeZ(z8UH) = U9nT;
rUCa(z8UH) = gjUR;
count = count + 1; IVni(count) = jaqu; nyuo(count) = AMXi;
end
end
end
end
path = [];
end
function d4Up = yM1q(Y2fY)
rhLK = unique(Y2fY);
rhLK(1) = [];
lYMH = zeros(size(rhLK));
for Wbee = 1:length(lYMH)
lYMH(Wbee) = nnz(rhLK(Wbee) == Y2fY(:));
end
for Wbee = 1:length(lYMH)
if lYMH(Wbee) == 1
Y2fY(rhLK(Wbee) == Y2fY(:)) = -1;
end
end
yP9R = zeros(size(Y2fY)+2);
PCC7 = repmat(-1,size(yP9R));
PCC7(2:end-1,2:end-1) = Y2fY;
d4Up = [];
[OEIK, WKVE] = find(PCC7>0);
IMWN = (size(PCC7,1)/2 - OEIK).^2 + (size(PCC7,2)/2 - WKVE).^2;
[IMWN, order] = sort(IMWN);
order = order';
for wqrx = 1:length(OEIK)-1
xQtt = 0;
Qi6m = 32;
for Wbee = order
if yP9R(OEIK(Wbee), WKVE(Wbee))
continue
end
[Uslx, ClXs, VjjM] = Y5PO(PCC7, yP9R, OEIK(Wbee), WKVE(Wbee), Qi6m);
if Uslx > xQtt
xQtt = Uslx;
grF_ = ClXs;
Qi6m = VjjM;
if Qi6m == 1
break
end
end
end
if xQtt == 0
d4Up = d4Up - 1;
return
end
yP9R = GEkJ(yP9R, grF_, PCC7(grF_(1,1), grF_(1,2)));
PCC7 = GEkJ(PCC7, grF_, PCC7(grF_(1,1), grF_(1,2)));
d4Up = [d4Up; grF_];
end
d4Up = d4Up - 1;
end
function [xQtt, grF_, Qi6m] = Y5PO(Y2fY, yP9R, bt8q, W1aD, IsPY)
xQtt = 0;
grF_ = [];
OV6E = [1 -1 0 0];
wqrx = [0 0 1 -1];
if ~any(yP9R(:)==Y2fY(bt8q,W1aD))
yP9R = Y2fY;
end
PCC7 = Y2fY;
PCC7(PCC7>0) = -1;
PCC7(bt8q,W1aD) = 1;
Qi6m = Inf;
rhLK = Y2fY(bt8q,W1aD);
for Wbee = 1:IsPY-2
[OEIK, WKVE] = find(PCC7==Wbee);
for lYMH = 1:length(OEIK)
for jRu5 = 1:4
ni1M = OEIK(lYMH) + OV6E(jRu5);
Yoy5 = WKVE(lYMH) + wqrx(jRu5);
if yP9R(ni1M,Yoy5) == rhLK && ~(ni1M == bt8q && Yoy5 == W1aD)
Qi6m = Wbee;
break
end
MSZx = PCC7(ni1M,Yoy5);
if MSZx == 0
PCC7(ni1M,Yoy5) = Wbee+1;
end
end
if Qi6m < Inf
break
end
end
if Qi6m < Inf
break
end
end
if Qi6m == Inf
return
end
xQtt = Y2fY(bt8q,W1aD) - Qi6m;
if Qi6m == 1
grF_ = [bt8q, W1aD, ni1M, Yoy5];
return
end
grF_ = zeros(Qi6m,4);
for step = Qi6m:-1:1
for jRu5 = 1:4
qd8h = ni1M + OV6E(jRu5);
X9jB = Yoy5 + wqrx(jRu5);
if PCC7(qd8h, X9jB) == step
break
end
end
grF_(step,:) = [qd8h, X9jB, ni1M, Yoy5];
ni1M = qd8h;
Yoy5 = X9jB;
end
end
function [W B] = Z9j_(B,nZfY,jfz7)
W = [];
[LVLs wqrx] = jur9(B,jfz7);
if wqrx < 1
return
end
LVLs=sortrows(LVLs,-jfz7);
for Wbee = 1:wqrx
if LVLs(Wbee,2) >= 2
rhLK = LVLs(Wbee,1);
[U_4G Bfxz] = find(B == rhLK);
DiOr = size(U_4G,1);
BDjo = DiOr*(DiOr-1)/2;
dist = zeros(BDjo,3);
kQrw = 0;
for PUeo = 1:DiOr
for Y2fY = (PUeo+1):DiOr
kQrw = kQrw + 1;
dist(kQrw,1) = PUeo;
dist(kQrw,2) = Y2fY;
dist(kQrw,3) = abs(U_4G(PUeo)-U_4G(Y2fY)) + abs(Bfxz(PUeo)-Bfxz(Y2fY));
end
end
[IMWN blcF] = sort(dist(:,3));
dist = dist(blcF,:);
XCOz = reshape(dist(:,1:2)',[],1);
et4B = 0;
aLNP = 1;
mAhH = false(DiOr,1);
for Wbee=1:DiOr
MwGP = find( ~mAhH(XCOz(aLNP:end)) , 1 , 'first');
if isempty(MwGP)
break
end
PUeo = XCOz(MwGP);
Distance = abs(U_4G([1:PUeo-1,PUeo+1:end]')-U_4G(PUeo)) + abs(Bfxz([1:PUeo-1,PUeo+1:end]')-Bfxz(PUeo));
if max(Distance)>nZfY-1
break
end
path = BF2a(B,U_4G(PUeo),Bfxz(PUeo),U_4G([1:PUeo-1,PUeo+1:end]'),Bfxz([1:PUeo-1,PUeo+1:end]'), -rhLK, nZfY, 2*rhLK);
if size(path,1) > 0
W = [W; path];
B = GEkJ(B,path,-rhLK);
et4B = 2;
break
end
end
if et4B < 2
continue
end
for OV6E = 3:DiOr
[zZow vKRV] = find(B == -rhLK);
[U_4G Bfxz] = find(B == rhLK);
[Ufe0,hWwF] = meshgrid(U_4G,zZow);
[wLgZ,Riq9] = meshgrid(U_4G,zZow);
Distance = abs(Ufe0-hWwF) + abs(wLgZ-Riq9);
if max(Distance(:))>nZfY-1
break
end
path = BF2a(B,zZow,vKRV,U_4G,Bfxz, -rhLK, nZfY, 2*rhLK);
if size(path,1) > 0
W = [W; path];
B = GEkJ(B,path,-rhLK);
j0g6 = true;
else
break
end
end
end
end
end
function [W B] = BPUC(B,W,Kv3I,jfz7)
[LVLs wqrx] = jur9(B,jfz7);
if wqrx < 1, return, end
LVLs=sortrows(LVLs,-jfz7);
for Wbee = 1:wqrx
rhLK = LVLs(Wbee,1);
JO30 = sum(B == -rhLK);
if JO30 == 0
if LVLs(Wbee,2) >= 2
[U_4G Bfxz] = find(B == rhLK);
DiOr = size(U_4G,1);
BDjo = DiOr*(DiOr-1)/2;
dist = zeros(BDjo,3);
kQrw = 0;
for PUeo = 1:DiOr
for Y2fY = (PUeo+1):DiOr
kQrw = kQrw + 1;
dist(kQrw,1) = PUeo;
dist(kQrw,2) = Y2fY;
dist(kQrw,3) = abs(U_4G(PUeo)-U_4G(Y2fY)) + abs(Bfxz(PUeo)-Bfxz(Y2fY));
end
end
[IMWN blcF] = sort(dist(:,3));
dist = dist(blcF,:);
maxstep = min(Kv3I,2*rhLK+1);
j0g6 = false;
for kQrw = 1:BDjo
if dist(kQrw,3) > maxstep+1
break
end
PUeo = dist(kQrw,1);
Y2fY = dist(kQrw,2);
path = NY46(B,[U_4G(PUeo); U_4G(Y2fY)], [Bfxz(PUeo); Bfxz(Y2fY)], -rhLK, Kv3I, 2*rhLK);
if size(path,1) > 0
W = [W; path];
B = GEkJ(B,path,-rhLK);
j0g6 = true;
break
end
end
if ~j0g6
continue
end
end
end
[U_4G Bfxz] = find(B == rhLK);
EBID = size(U_4G,1);
maxstep = min(Kv3I,rhLK+1);
for OV6E = 1:EBID
[zZow vKRV] = find(B == -rhLK);
[U_4G Bfxz] = find(B == rhLK);
j0g6 = false;
path = BF2a(B,zZow,vKRV,U_4G,Bfxz, -rhLK, Kv3I, rhLK);
if size(path,1) > 0
W = [W; path];
B = GEkJ(B,path,-rhLK);
j0g6 = true;
end
if ~j0g6
break
end
end
end
end
function [W B] = PikE(iIuA,B,W,vDl3,Kv3I,jfz7)
function FExA()
for d4Up = 1:size(path,1);
if path(d4Up,1) == path(d4Up,3)
gc1W(path(d4Up,1),path(d4Up,2)) = false;
gc1W(path(d4Up,3),path(d4Up,4)) = false;
if path(d4Up,2) == path(d4Up,4)
B(path(d4Up,1),path(d4Up,2)) = -9999;
end
end
if path(d4Up,2) == path(d4Up,4)
j3ah(path(d4Up,1),path(d4Up,2)) = false;
j3ah(path(d4Up,3),path(d4Up,4)) = false;
end
end
end
[gc1W j3ah] = t4TE(iIuA,B,W);
[LVLs wqrx] = jur9(B,jfz7);
if wqrx < 1, return, end
LVLs=sortrows(LVLs,-jfz7);
for Wbee = 1:wqrx
rhLK = LVLs(Wbee,1);
JO30 = sum(B == -rhLK);
if JO30 == 0
if LVLs(Wbee,2) >= 2
[U_4G Bfxz] = find(B == rhLK);
DiOr = size(U_4G,1);
BDjo = DiOr*(DiOr-1)/2;
dist = zeros(BDjo,3);
kQrw = 0;
for PUeo = 1:DiOr
for Y2fY = (PUeo+1):DiOr
kQrw = kQrw + 1;
dist(kQrw,1) = PUeo;
dist(kQrw,2) = Y2fY;
dist(kQrw,3) = abs(U_4G(PUeo)-U_4G(Y2fY)) + abs(Bfxz(PUeo)-Bfxz(Y2fY));
end
end
[IMWN blcF] = sort(dist(:,3));
dist = dist(blcF,:);
maxstep = min((vDl3*25)+Kv3I,2*rhLK+1);
j0g6 = false;
for kQrw = 1:BDjo
if dist(kQrw,3) > maxstep+1
break
end
PUeo = dist(kQrw,1);
Y2fY = dist(kQrw,2);
path = HZE7(B,gc1W,j3ah,[U_4G(PUeo); U_4G(Y2fY)], [Bfxz(PUeo); Bfxz(Y2fY)], -rhLK, vDl3, Kv3I, 2*rhLK);
if size(path,1) > 0
W = [W; path];
B = GEkJ(B,path,-rhLK);
FExA();
j0g6 = true;
break
end
end
if ~j0g6
continue
end
end
end
[U_4G Bfxz] = find(B == rhLK);
EBID = size(U_4G,1);
maxstep = min((vDl3*25)+Kv3I,rhLK+1);
for OV6E = 1:EBID
[zZow vKRV] = find(B == -rhLK);
[U_4G Bfxz] = find(B == rhLK);
j0g6 = false;
path = F17l(B,gc1W,j3ah,zZow,vKRV,U_4G,Bfxz, -rhLK, vDl3, Kv3I, rhLK);
if size(path,1) > 0
W = [W; path];
B = GEkJ(B,path,-rhLK);
FExA();
j0g6 = true;
end
if ~j0g6
break
end
end
end
end
function path = F17l(B,UVzS,x3jr,rowS,colS,xDTj,Yf6H,JuCX,vDl3,wGCf,bQjT)
function path = M7Vi(z8UH,step)
cECH(z8UH) = U9nT;
path = zeros(step,4);
N1pS = 0;
Uc6H = 0;
umWm = zeros(step,1);
QCNZ = zeros(step,1);
hyv2 = zeros(step,1);
while isempty(find(NdKt==z8UH,1))
N1pS = N1pS + 1;
umWm(N1pS,1) = z8UH;
IYqk = cECH(z8UH);
QCNZ(N1pS,1) = IYqk;
z8UH = IYqk;
if EOE4(z8UH)
Uc6H = Uc6H + 1;
hyv2(Uc6H,1) = z8UH;
end
end
umWm = [ umWm(1:N1pS,:) ; hyv2(1:Uc6H,1) ];
QCNZ = [ QCNZ(1:N1pS,:) ; hyv2(1:Uc6H,1) ];
path = [ mod(umWm,ma8P) , ceil(umWm/ma8P) , mod(QCNZ,ma8P) , ceil(QCNZ/ma8P) ];
end
[ma8P UHnc] = size(B);
EOE4 = false(ma8P,UHnc);
cECH = zeros(ma8P,UHnc);
URW0 = -ones(ma8P,UHnc);
NdKt = rowS + (colS-1)*ma8P;
URW0(NdKt) = 0;
URW0(xDTj + (Yf6H-1)*ma8P) = -2;
maxstep = min((vDl3*25)+wGCf,bQjT+1);
IFEb = zeros(maxstep+26,1);
JXN_ = [-1 1];
for step = 0:maxstep
if step == 0
bt8q = NdKt;
elseif IFEb(step) == 0
continue
else
bt8q = find(URW0 == step);
end
DiOr = numel(bt8q);
for Wbee = 1:DiOr
U9nT = bt8q(Wbee);
for Nfcy = 1:2
z8UH = U9nT + JXN_(Nfcy) * ma8P;
UZ4K = URW0(z8UH);
if UZ4K == -2
path = M7Vi(z8UH,step+1);
return
elseif UZ4K == -1
if B(z8UH) == 0
URW0(z8UH) = step+1; IFEb(step+1) = 1;
cECH(z8UH) = U9nT;
elseif UVzS(z8UH)
URW0(z8UH) = step+26; IFEb(step+26) = 1;
cECH(z8UH) = U9nT;
EOE4(z8UH) = true;
end
end
end
for Nfcy = 1:2
z8UH = U9nT + JXN_(Nfcy);
UZ4K = URW0(z8UH);
if UZ4K == -2
path = M7Vi(z8UH,step+1);
return
elseif UZ4K == -1
if B(z8UH) == 0
URW0(z8UH) = step+1; IFEb(step+1) = 1;
cECH(z8UH) = U9nT;
elseif x3jr(z8UH)
URW0(z8UH) = step+26; IFEb(step+26) = 1;
cECH(z8UH) = U9nT;
EOE4(z8UH) = true;
end
end
end
end
end
path = zeros(0,4);
end
function path = BF2a(B,rowS,colS,PQg8,areu,JuCX,nZfY,bQjT)
[ma8P UHnc] = size(B);
HIeZ = zeros(ma8P,UHnc);
rUCa = zeros(ma8P,UHnc);
URW0 = -ones(ma8P,UHnc);
URW0(rowS+(colS-1)*ma8P) = 0;
URW0(PQg8+(areu-1)*ma8P) = -2;
i6HE = zeros(ma8P*UHnc,1);
nyuo = zeros(ma8P*UHnc,1);
count = numel(rowS);
i6HE(1:count) = rowS;
nyuo(1:count) = colS;
J0Mg=[-1 1 0 0];
ah92=[0 0 -1 1];
for step = 0:min(nZfY,bQjT)
if count < 1, break, end
DiOr = count;
ERAE = i6HE(1:DiOr);
W1aD = nyuo(1:DiOr);
count = 0;
for Wbee = 1:DiOr
gjUR = W1aD(Wbee);
U9nT = ERAE(Wbee);
for nsnP=1:4
jaqu = U9nT + J0Mg(nsnP);
AMXi = gjUR + ah92(nsnP);
z8UH = jaqu + (AMXi-1)*ma8P;
UZ4K = URW0(z8UH);
if UZ4K == -2
xi1R=step+1;
HIeZ(jaqu,AMXi) = ERAE(Wbee);
rUCa(jaqu,AMXi) = W1aD(Wbee);
path = zeros(xi1R,4);
for OV6E = 1:xi1R
path(OV6E,1:2) = [jaqu AMXi];
xcHW = HIeZ(jaqu,AMXi);
vZbB = rUCa(jaqu,AMXi);
path(OV6E,3:4) = [xcHW vZbB];
jaqu = xcHW;
AMXi = vZbB;
end
return
end
if UZ4K == -1 && B(z8UH) == 0
URW0(z8UH) = step+1;
HIeZ(z8UH) = U9nT;
rUCa(z8UH) = gjUR;
count = count + 1; i6HE(count) = jaqu; nyuo(count) = AMXi;
end
end
end
end
path = [];
end
|