| Code: | function W = solv(B)
tLiF=315;
PwKm = rand(43,1);
W=zjuq(B);
WEUK = ta1t(B,W);
[Rq7L,hpCC] = size(B);
rrPF = B(Rq7L:-1:1,:);
rrPF = rrPF.';
[Nxel,rvjg] = BRzs(rrPF,[1 2],[1 2],4*Rq7L*hpCC);
if WEUK > rvjg
W = [Rq7L-Nxel(:,2)+1 Nxel(:,1) Rq7L-Nxel(:,4)+1 Nxel(:,3)];
WEUK=rvjg;
end
I243=rand('state');
rand(tLiF,1);
if WEUK>1000 && rand<.5
[Nxel,rvjg] = BRzs(rrPF,[1 2],[1 2],4*Rq7L*hpCC);
if WEUK > rvjg
W = [Rq7L-Nxel(:,2)+1 Nxel(:,1) Rq7L-Nxel(:,4)+1 Nxel(:,3)];
WEUK=rvjg;
end
end
if WEUK>1000 && rand<.5
[Nxel,rvjg] = BRzs(rrPF,[1 2],[1 2],4*Rq7L*hpCC);
if WEUK > rvjg
W = [Rq7L-Nxel(:,2)+1 Nxel(:,1) Rq7L-Nxel(:,4)+1 Nxel(:,3)];
WEUK=rvjg;
end
end
rand('state',I243);
end
function [W,WEUK] = BRzs(W03D,cSCD,gGc9,gLkm)
[PINX,uHCZ]=size(W03D);
SMGQ= -ones(PINX+2,uHCZ+2);
SMGQ(2:end-1,2:end-1)=W03D;
vGvV = SMGQ;
i_xW = 4;
if size(vGvV,2) > 20
QNDn = 4;
owB4 = 8;
egft = 18;
else
QNDn = 3;
owB4 = 7;
egft = 13;
end
WEUK = inf;
vute = [1 2;2 1];
CbZP = [1 3;3 1];
CzZ_ = [3 2 1;1 2 3];
for ZZON = cSCD
if ZZON == 2
[U589 jdb7] = sGcU(vGvV,QNDn,vute(ZZON,:));
[nQIc cXjD] = RR5c(jdb7,U589,owB4,CbZP(ZZON,:));
[M_GG YXwo] = RR5c(cXjD,nQIc,egft,CbZP(ZZON,:));
else
[U589 jdb7] = sGcU(vGvV,4,vute(ZZON,:));
[M_GG YXwo] = RR5c(jdb7,U589,11,CbZP(ZZON,:));
end
for i2EC = gGc9
QEF7 = z1RN(vGvV,YXwo,M_GG,i_xW,egft,CzZ_(i2EC,:))-1;
GqYP = ta1t(W03D,QEF7);
if GqYP <= WEUK
WEUK = GqYP;
W = QEF7;
i_xW = i_xW - 1;
end
end
end
end
function KA6y = ta1t(B,W)
PINX=size(B,1);
B(W(:,1)+(W(:,2)-1)*PINX)=0;
B(W(:,3)+(W(:,4)-1)*PINX)=0;
KA6y=sum(B(:))+size(W,1)+sum(W(:,1)==W(:,3)&W(:,2)==W(:,4))*24;
end
function [giF_ GIw3] = OXlT(B,T01x)
Th9N = sort(B(B>0),'descend');
S7tE = size(Th9N,1);
if S7tE < 1
giF_ = [];
GIw3 = 0;
return
end
FUxR=Th9N(diff([0;Th9N])~=0);
giF_ = zeros(nnz(FUxR),3);
FnAg=histc(Th9N,FUxR(end:-1:1));
giF_(:,1)=FUxR;
giF_(:,2)=FnAg(end:-1:1);
GIw3=nnz(FUxR);
if T01x < 3, return, end
for qwUC = 1:GIw3
if giF_(qwUC,2) >= 2
HO4I = giF_(qwUC,1);
[sixk D13Q] = find(B == HO4I);
WiqQ = 0;
KmMM = size(sixk,1);
WiqQ=sum(abs(diff(sixk))+abs(diff(D13Q)));
giF_(qwUC,3) = giF_(qwUC,2)*HO4I - 0.85 * WiqQ;
end
end
end
function [W B] = sGcU(B,egft,T01x)
W = [];
[giF_ GIw3] = OXlT(B,T01x);
if GIw3 < 1
return
end
giF_=sortrows(giF_,-T01x);
for qwUC = 1:GIw3
if giF_(qwUC,2) >= 2
HO4I = giF_(qwUC,1);
[sixk D13Q] = find(B == HO4I);
KmMM = size(sixk,1);
B3EU = KmMM*(KmMM-1)/2;
dist = zeros(B3EU,3);
[KqDr dCNg]=find(tril(ones(KmMM),-1));
dist(:,1)=dCNg;
dist(:,2)=KqDr;
dist(:,3)=abs(D13Q(KqDr)-D13Q(dCNg))+abs(sixk(KqDr)-sixk(dCNg));
[WiqQ eVfq] = sort(dist(:,3));
dist = dist(eVfq,:);
S7tE = 0;
for ZZON = 1:B3EU
if dist(ZZON,3) > egft+1
break
end
tbC4 = dist(ZZON,1);
vaj5 = dist(ZZON,2);
path = FUz5(B,[sixk(tbC4); sixk(vaj5)], [D13Q(tbC4); D13Q(vaj5)], -HO4I, egft, 2*HO4I);
if size(path,1) > 0
W = [W; path];
B = F694(B,path,-HO4I);
S7tE = 2;
edit = [1:(tbC4-1) (tbC4+1):(vaj5-1) (vaj5+1):KmMM];
sixk = [sixk(tbC4); sixk(vaj5); sixk(edit)];
D13Q = [D13Q(tbC4); D13Q(vaj5); D13Q(edit)];
break
else
end
end
if S7tE < 2
continue
end
for eT4N = 3:KmMM
[SLvu NR1w] = find(B == -HO4I);
uQuc = size(SLvu,1);
B3EU = uQuc * (KmMM - S7tE);
uGHw = (1:uQuc*KmMM)';
vaj5=mod(uGHw-1,KmMM)+1;
tbC4=ceil(uGHw/KmMM);
cJd8 = (vaj5>S7tE);
tbC4 = tbC4(cJd8);
vaj5 = vaj5(cJd8);
WiqQ = abs(SLvu(tbC4)-sixk(vaj5)) + abs(NR1w(tbC4)-D13Q(vaj5));
dist = [tbC4,vaj5,WiqQ];
[WiqQ eVfq] = sort(dist(:,3));
dist = dist(eVfq,:);
c7mQ = false(KmMM,1);
BZyp = false;
for ZZON = 1:B3EU
if dist(ZZON,3) > egft+1
break
end
vaj5 = dist(ZZON,2);
if c7mQ(vaj5)
randperm(4);
continue
end
tbC4 = dist(ZZON,1);
path = FUz5(B,[SLvu(tbC4); sixk(vaj5)], [NR1w(tbC4); D13Q(vaj5)], -HO4I, egft, HO4I);
c7mQ(vaj5)=true;
if size(path,1) > 0
W = [W; path];
B = F694(B,path,-HO4I);
S7tE = S7tE + 1;
BZyp = true;
sixk([eT4N vaj5]) = sixk([vaj5 eT4N]);
D13Q([eT4N vaj5]) = D13Q([vaj5 eT4N]);
break
end
end
if ~BZyp
break
end
end
end
end
end
function [W B] = RR5c(B,W,cT1x,T01x)
[giF_ GIw3] = OXlT(B,T01x);
if GIw3 < 1, return, end
giF_=sortrows(giF_,-T01x);
for qwUC = 1:GIw3
HO4I = giF_(qwUC,1);
uQuc = sum(B == -HO4I);
if uQuc == 0
if giF_(qwUC,2) >= 2
[sixk D13Q] = find(B == HO4I);
KmMM = size(sixk,1);
B3EU = KmMM*(KmMM-1)*.5;
uGHw = (1:KmMM*KmMM)';
vaj5=mod(uGHw-1,KmMM)+1;
tbC4=ceil(uGHw/KmMM);
cJd8 = (tbC4<vaj5);
tbC4 = tbC4(cJd8);
vaj5 = vaj5(cJd8);
WiqQ = abs(sixk(tbC4)-sixk(vaj5)) + abs(D13Q(tbC4)-D13Q(vaj5));
dist = [tbC4,vaj5,WiqQ];
[WiqQ eVfq] = sort(dist(:,3));
dist = dist(eVfq,:);
maxstep = min(cT1x,2*HO4I+1);
BZyp = false;
for ZZON = 1:B3EU
if dist(ZZON,3) > maxstep+1
break
end
tbC4 = dist(ZZON,1);
vaj5 = dist(ZZON,2);
path = FUz5(B,[sixk(tbC4); sixk(vaj5)], [D13Q(tbC4); D13Q(vaj5)], -HO4I, cT1x, 2*HO4I);
if size(path,1) > 0
W = [W; path];
B = F694(B,path,-HO4I);
BZyp = true;
break
end
end
if ~BZyp
continue
end
end
end
[sixk D13Q] = find(B == HO4I);
FlSc = size(sixk,1);
maxstep = min(cT1x,HO4I+1);
for eT4N = 1:FlSc
[SLvu NR1w] = find(B == -HO4I);
uQuc = size(SLvu,1);
B3EU = uQuc * (FlSc-eT4N+1);
dist = zeros(B3EU,3);
ZZON = 0;
uGHw = (1:uQuc*FlSc)';
vaj5=mod(uGHw-1,FlSc)+1;
tbC4=ceil(uGHw/FlSc);
cJd8 = (vaj5>=eT4N);
tbC4 = tbC4(cJd8);
vaj5 = vaj5(cJd8);
WiqQ = abs(SLvu(tbC4)-sixk(vaj5)) + abs(NR1w(tbC4)-D13Q(vaj5));
dist = [tbC4,vaj5,WiqQ];
[WiqQ eVfq] = sort(dist(:,3));
dist = dist(eVfq,:);
c7mQ = false(FlSc,1);
BZyp = false;
for ZZON = 1:B3EU
if dist(ZZON,3) > maxstep+1
break
end
vaj5 = dist(ZZON,2);
if c7mQ(vaj5)
randperm(4);
continue
end
tbC4 = dist(ZZON,1);
path = FUz5(B,[SLvu(tbC4); sixk(vaj5)], [NR1w(tbC4); D13Q(vaj5)], -HO4I, cT1x, 2*HO4I);
c7mQ(vaj5)=true;
if size(path,1) > 0
W = [W; path];
B = F694(B,path,-HO4I);
BZyp = true;
sixk([eT4N vaj5]) = sixk([vaj5 eT4N]);
D13Q([eT4N vaj5]) = D13Q([vaj5 eT4N]);
break
end
end
if ~BZyp
break
end
end
end
end
function [uwvp THFM] = V_5h(SMGQ,B,path)
[HMzu i0DD] = size(B);
uwvp = SMGQ == 0;
THFM = uwvp;
uwvp(:,[1 i0DD]) = false;
THFM([1 HMzu],:) = false;
for qwUC = 1:size(path,1)
if path(qwUC,1) == path(qwUC,3)
uwvp(path(qwUC,1),path(qwUC,2)) = false;
uwvp(path(qwUC,3),path(qwUC,4)) = false;
end
if path(qwUC,2) == path(qwUC,4)
THFM(path(qwUC,1),path(qwUC,2)) = false;
THFM(path(qwUC,3),path(qwUC,4)) = false;
end
end
end
function B = F694(B,path,Mtfl)
B(path(1,1),path(1,2)) = Mtfl;
for qwUC = 1:size(path,1);
B(path(qwUC,3),path(qwUC,4)) = Mtfl;
end
end
function path = bncW(N6vt,qoQn,HMzu,fcJS)
path = zeros(fcJS,4);
jtzZ = mod(N6vt,HMzu);
nB9k = ceil(N6vt/HMzu);
for eT4N = 1:fcJS
path(eT4N,1:2) = [jtzZ nB9k];
N6vt = qoQn(N6vt);
jtzZ = mod(N6vt,HMzu);
nB9k = ceil(N6vt/HMzu);
path(eT4N,3:4) = [jtzZ nB9k];
end
end
function path = FUz5(B,sixk,D13Q,Mtfl,egft,Q613)
[HMzu i0DD] = size(B);
qoQn = zeros(HMzu,i0DD);
fwwV = -ones(HMzu,i0DD);
fwwV(sixk(2),D13Q(2)) = 0;
fwwV(sixk(1),D13Q(1)) = -2;
fwwV( B == Mtfl ) = -2;
nVUl = zeros(HMzu*i0DD,1);
nVUl(1) = sixk(2) + (D13Q(2)-1)*HMzu;
count = 1;
mgZZ = [-1 1 -HMzu HMzu];
gvcI = randperm(4);
for step = 0:min(egft,Q613)
if count < 1, break, end
KmMM = count;
N6vt = nVUl;
count = 0;
for qwUC = 1:KmMM
HhIr = N6vt(qwUC);
for ECxh=1:4
UPFW = HhIr + mgZZ(gvcI(ECxh));
oeO4 = fwwV(UPFW);
if oeO4 == -2
qoQn(UPFW) = HhIr;
path = bncW(UPFW,qoQn,HMzu,step+1);
return
end
if oeO4 == -1 && B(UPFW) == 0
fwwV(UPFW) = step+1;
qoQn(UPFW) = HhIr;
count = count + 1;
nVUl(count) = UPFW;
end
end
end
end
path = [];
end
function path = gYJA(B,uwvp,THFM,sixk,D13Q,Mtfl,i_xW,cT1x,Q613)
[HMzu i0DD] = size(B);
BIcb = false(HMzu,i0DD);
qoQn = zeros(HMzu,i0DD);
fwwV = -ones(HMzu,i0DD);
fwwV(sixk(1),D13Q(1)) = -2;
fwwV( B == Mtfl ) = -2;
maxstep = min((i_xW*27)+cT1x,Q613+1);
CPYt = zeros(maxstep+28,1);
ZBR8 = sixk(2) + (D13Q(2)-1)*HMzu;
CPYt(1) = ZBR8;
mgZZ = [-HMzu HMzu -1 1];
for step = 1:maxstep
while CPYt(step)>0
HhIr = CPYt(step);
CPYt(step)=fwwV(HhIr);
for ECxh = 1:4
UPFW = HhIr + mgZZ(ECxh);
oeO4 = fwwV(UPFW);
if oeO4==-1
if B(UPFW) == 0
fwwV(UPFW) = CPYt(step+1);
CPYt(step+1) = UPFW;
qoQn(UPFW) = HhIr;
elseif (uwvp(UPFW)&&(ECxh<3)) || (THFM(UPFW)&&(ECxh>2))
fwwV(UPFW) = CPYt(step+26);
CPYt(step+26) = UPFW;
qoQn(UPFW) = HhIr;
BIcb(UPFW) = true;
end
end
if oeO4==-2
qoQn(UPFW) = HhIr;
jtzZ=mod(UPFW,HMzu);
nB9k=ceil(UPFW/HMzu);
path = zeros(step+1,4);
eT4N = 0;
while UPFW~=ZBR8
eT4N = eT4N + 1;
path(eT4N,1:2) = [jtzZ nB9k]; UPFW = qoQn(UPFW);
jtzZ=mod(UPFW,HMzu);
nB9k=ceil(UPFW/HMzu);
path(eT4N,3:4) = [jtzZ nB9k];
if BIcb(jtzZ,nB9k)
eT4N = eT4N + 1;
path(eT4N,:) = [jtzZ nB9k jtzZ nB9k];
end
end
path = path(1:eT4N,:);
return
end
end
end
end
path = [];
end
function W = zjuq(B)
[W,WEUK] = iIYY(B);
RA5M = 0;
KM7D = round(mod(B(:),2));
if WEUK < 2100
return
end
[tmzZ,Ckko] = size(B);
B = flipud(fliplr(B'));
[CbpP,JL_U] = iIYY(B);
if WEUK > JL_U
W = [tmzZ-CbpP(:,2)+1 Ckko-CbpP(:,1)+1 tmzZ-CbpP(:,4)+1 Ckko-CbpP(:,3)+1];
end
if KM7D~=RA5M; W = zeros(0,4); end
end
function [W,WEUK] = iIYY(B)
[PINX,uHCZ]=size(B);
TvS3=nan(PINX+2,uHCZ+2);
TvS3(2:end-1,2:end-1)=B;
vGvV = TvS3;
i_xW = 4;
if size(vGvV,2) > 20
QNDn = 4;
owB4 = 8;
egft = 12;
else
QNDn = 3;
owB4 = 7;
egft = 11;
end
WEUK = inf;
vute = [1 2;2 1];
CbZP = [1 3;3 1];
CzZ_ = [3 2 1;1 2 3];
for ZZON = 1:2
if ZZON == 2
[U589 jdb7] = DxIJ(vGvV,QNDn,vute(ZZON,:));
[nQIc cXjD] = OZro(jdb7,U589,owB4,CbZP(ZZON,:));
[M_GG YXwo] = OZro(cXjD,nQIc,egft,CbZP(ZZON,:));
else
[U589 jdb7] = DxIJ(vGvV,4,vute(ZZON,:));
[M_GG YXwo] = OZro(jdb7,U589,11,CbZP(ZZON,:));
end
for i2EC = 1:2
if ZZON == 2 && i2EC == 2 && WEUK > 2100, return, end
QEF7 = z1RN(vGvV,YXwo,M_GG,i_xW,egft,CzZ_(i2EC,:))-1;
GqYP = ta1t(B,QEF7);
if GqYP <= WEUK
WEUK = GqYP;
W = QEF7;
i_xW = i_xW - 1;
end
end
end
if PINX*uHCZ > 290; return; end
Vw4g = sum(W(:,1)==W(:,3)&W(:,2)==W(:,4));
if Vw4g <= 4
XFBm = Nv0d(B);
NYga = ta1t(B,XFBm);
if NYga < WEUK
W = XFBm;
WEUK = NYga;
end
end
end
function path = ySbC(B,sixk,D13Q,Mtfl,egft,Q613)
function path = k_r_(WBzF,XNQN,Di8u)
AO8X(WBzF,XNQN) = A3Du(qwUC);
KUUd(WBzF,XNQN) = X1WJ(qwUC);
path = zeros(Di8u,4);
for bif9 = 1:Di8u
path(bif9,1:2) = [WBzF XNQN];
zzao = AO8X(WBzF,XNQN);
VkEz = KUUd(WBzF,XNQN);
path(bif9,3:4) = [zzao VkEz];
WBzF = zzao;
XNQN = VkEz;
end
end
[HMzu i0DD] = size(B);
AO8X = zeros(HMzu,i0DD);
KUUd = zeros(HMzu,i0DD);
fwwV = -ones(HMzu,i0DD);
fwwV(sixk(2),D13Q(2)) = 0;
fwwV(sixk(1),D13Q(1)) = -2;
fwwV( B == Mtfl ) = -2;
bQea = zeros(HMzu*i0DD,1);
LTpa = zeros(HMzu*i0DD,1);
count = 1;
bQea(1) = sixk(2);
LTpa(1) = D13Q(2);
hCg6=[-1 1 0 0];
D04X=[0 0 -1 1];
for step = 0:min(egft,Q613)
if count < 1, break, end
KmMM = count;
A3Du = bQea(1:KmMM);
X1WJ = LTpa(1:KmMM);
count = 0;
for qwUC = 1:KmMM
BTPl = X1WJ(qwUC);
HhIr = A3Du(qwUC);
for ECxh=1:4
WBzF = HhIr + hCg6(ECxh);
XNQN = BTPl + D04X(ECxh);
UPFW = WBzF + (XNQN-1)*HMzu;
oeO4 = fwwV(UPFW);
if oeO4 == -2
path = k_r_(WBzF,XNQN,step+1);
return
elseif oeO4 == -1 && B(UPFW) == 0
fwwV(UPFW) = step+1;
AO8X(UPFW) = HhIr;
KUUd(UPFW) = BTPl;
count = count + 1; bQea(count) = WBzF; LTpa(count) = XNQN;
end
end
end
end
path = [];
end
function fK6b = Nv0d(vaj5)
HO4I = unique(vaj5);
HO4I(1) = [];
ztks = zeros(size(HO4I));
for qwUC = 1:length(ztks)
ztks(qwUC) = nnz(HO4I(qwUC) == vaj5(:));
end
for qwUC = 1:length(ztks)
if ztks(qwUC) == 1
vaj5(HO4I(qwUC) == vaj5(:)) = -1;
end
end
vu2N = zeros(size(vaj5)+2);
O8_o = repmat(-1,size(vu2N));
O8_o(2:end-1,2:end-1) = vaj5;
fK6b = [];
[yEDk, C9GU] = find(O8_o>0);
WiqQ = (size(O8_o,1)/2 - yEDk).^2 + (size(O8_o,2)/2 - C9GU).^2;
[WiqQ, order] = sort(WiqQ);
order = order';
for GIw3 = 1:length(yEDk)-1
gFM0 = 0;
kL0Q = 32;
for qwUC = order
if vu2N(yEDk(qwUC), C9GU(qwUC))
continue
end
[KA6y, o7PH, KobU] = KiT5(O8_o, vu2N, yEDk(qwUC), C9GU(qwUC), kL0Q);
if KA6y > gFM0
gFM0 = KA6y;
unqH = o7PH;
kL0Q = KobU;
if kL0Q == 1
break
end
end
end
if gFM0 == 0
fK6b = fK6b - 1;
return
end
vu2N = F694(vu2N, unqH, O8_o(unqH(1,1), unqH(1,2)));
O8_o = F694(O8_o, unqH, O8_o(unqH(1,1), unqH(1,2)));
fK6b = [fK6b; unqH];
end
fK6b = fK6b - 1;
end
function [gFM0, unqH, kL0Q] = KiT5(vaj5, vu2N, N6vt, X1WJ, Aw07)
gFM0 = 0;
unqH = [];
bif9 = [1 -1 0 0];
GIw3 = [0 0 1 -1];
if ~any(vu2N(:)==vaj5(N6vt,X1WJ))
vu2N = vaj5;
end
O8_o = vaj5;
O8_o(O8_o>0) = -1;
O8_o(N6vt,X1WJ) = 1;
kL0Q = Inf;
HO4I = vaj5(N6vt,X1WJ);
for qwUC = 1:Aw07-2
[yEDk, C9GU] = find(O8_o==qwUC);
for ztks = 1:length(yEDk)
for vmdW = 1:4
l8Vd = yEDk(ztks) + bif9(vmdW);
n2bg = C9GU(ztks) + GIw3(vmdW);
if vu2N(l8Vd,n2bg) == HO4I && ~(l8Vd == N6vt && n2bg == X1WJ)
kL0Q = qwUC;
break
end
hn9i = O8_o(l8Vd,n2bg);
if hn9i == 0
O8_o(l8Vd,n2bg) = qwUC+1;
end
end
if kL0Q < Inf
break
end
end
if kL0Q < Inf
break
end
end
if kL0Q == Inf
return
end
gFM0 = vaj5(N6vt,X1WJ) - kL0Q;
if kL0Q == 1
unqH = [N6vt, X1WJ, l8Vd, n2bg];
return
end
unqH = zeros(kL0Q,4);
for step = kL0Q:-1:1
for vmdW = 1:4
rhkl = l8Vd + bif9(vmdW);
BVHE = n2bg + GIw3(vmdW);
if O8_o(rhkl, BVHE) == step
break
end
end
unqH(step,:) = [rhkl, BVHE, l8Vd, n2bg];
l8Vd = rhkl;
n2bg = BVHE;
end
end
function [W B] = DxIJ(B,egft,T01x)
W = [];
[giF_ GIw3] = OXlT(B,T01x);
if GIw3 < 1
return
end
giF_=sortrows(giF_,-T01x);
for qwUC = 1:GIw3
if giF_(qwUC,2) >= 2
HO4I = giF_(qwUC,1);
[sixk D13Q] = find(B == HO4I);
KmMM = size(sixk,1);
B3EU = KmMM*(KmMM-1)/2;
dist = zeros(B3EU,3);
ZZON = 0;
for tbC4 = 1:KmMM
for vaj5 = (tbC4+1):KmMM
ZZON = ZZON + 1;
dist(ZZON,1) = tbC4;
dist(ZZON,2) = vaj5;
dist(ZZON,3) = abs(sixk(tbC4)-sixk(vaj5)) + abs(D13Q(tbC4)-D13Q(vaj5));
end
end
[WiqQ eVfq] = sort(dist(:,3));
dist = dist(eVfq,:);
b9sn = reshape(dist(:,1:2)',[],1);
S7tE = 0;
UJk2 = 1;
SJM2 = false(KmMM,1);
for qwUC=1:KmMM
yeoz = find( ~SJM2(b9sn(UJk2:end)) , 1 , 'first');
if isempty(yeoz)
break
end
tbC4 = b9sn(yeoz);
Distance = abs(sixk([1:tbC4-1,tbC4+1:end]')-sixk(tbC4)) + abs(D13Q([1:tbC4-1,tbC4+1:end]')-D13Q(tbC4));
if max(Distance)>egft-1
break
end
path = YRI6(B,sixk(tbC4),D13Q(tbC4),sixk([1:tbC4-1,tbC4+1:end]'),D13Q([1:tbC4-1,tbC4+1:end]'), -HO4I, egft, 2*HO4I);
if size(path,1) > 0
W = [W; path];
B = F694(B,path,-HO4I);
S7tE = 2;
break
end
end
if S7tE < 2
continue
end
for bif9 = 3:KmMM
[SLvu NR1w] = find(B == -HO4I);
[sixk D13Q] = find(B == HO4I);
[JdGf,UHsB] = meshgrid(sixk,SLvu);
[WQZn,jMWa] = meshgrid(sixk,SLvu);
Distance = abs(JdGf-UHsB) + abs(WQZn-jMWa);
if max(Distance(:))>egft-1
break
end
path = YRI6(B,SLvu,NR1w,sixk,D13Q, -HO4I, egft, 2*HO4I);
if size(path,1) > 0
W = [W; path];
B = F694(B,path,-HO4I);
BZyp = true;
else
break
end
end
end
end
end
function [W B] = OZro(B,W,ys1O,T01x)
[giF_ GIw3] = OXlT(B,T01x);
if GIw3 < 1, return, end
giF_=sortrows(giF_,-T01x);
for qwUC = 1:GIw3
HO4I = giF_(qwUC,1);
uQuc = sum(B == -HO4I);
if uQuc == 0
if giF_(qwUC,2) >= 2
[sixk D13Q] = find(B == HO4I);
KmMM = size(sixk,1);
B3EU = KmMM*(KmMM-1)/2;
dist = zeros(B3EU,3);
ZZON = 0;
for tbC4 = 1:KmMM
for vaj5 = (tbC4+1):KmMM
ZZON = ZZON + 1;
dist(ZZON,1) = tbC4;
dist(ZZON,2) = vaj5;
dist(ZZON,3) = abs(sixk(tbC4)-sixk(vaj5)) + abs(D13Q(tbC4)-D13Q(vaj5));
end
end
[WiqQ eVfq] = sort(dist(:,3));
dist = dist(eVfq,:);
maxstep = min(ys1O,2*HO4I+1);
BZyp = false;
for ZZON = 1:B3EU
if dist(ZZON,3) > maxstep+1
break
end
tbC4 = dist(ZZON,1);
vaj5 = dist(ZZON,2);
path = ySbC(B,[sixk(tbC4); sixk(vaj5)], [D13Q(tbC4); D13Q(vaj5)], -HO4I, ys1O, 2*HO4I);
if size(path,1) > 0
W = [W; path];
B = F694(B,path,-HO4I);
BZyp = true;
break
end
end
if ~BZyp
continue
end
end
end
[sixk D13Q] = find(B == HO4I);
HDcu = size(sixk,1);
maxstep = min(ys1O,HO4I+1);
for bif9 = 1:HDcu
[SLvu NR1w] = find(B == -HO4I);
[sixk D13Q] = find(B == HO4I);
BZyp = false;
path = YRI6(B,SLvu,NR1w,sixk,D13Q, -HO4I, ys1O, HO4I);
if size(path,1) > 0
W = [W; path];
B = F694(B,path,-HO4I);
BZyp = true;
end
if ~BZyp
break
end
end
end
end
function [W B] = z1RN(TvS3,B,W,i_xW,ys1O,T01x)
function GnDY()
for fK6b = 1:size(path,1);
if path(fK6b,1) == path(fK6b,3)
eYmK(path(fK6b,1),path(fK6b,2)) = false;
eYmK(path(fK6b,3),path(fK6b,4)) = false;
if path(fK6b,2) == path(fK6b,4)
B(path(fK6b,1),path(fK6b,2)) = -9999;
end
end
if path(fK6b,2) == path(fK6b,4)
Jtlc(path(fK6b,1),path(fK6b,2)) = false;
Jtlc(path(fK6b,3),path(fK6b,4)) = false;
end
end
end
[eYmK Jtlc] = V_5h(TvS3,B,W);
[giF_ GIw3] = OXlT(B,T01x);
if GIw3 < 1, return, end
giF_=sortrows(giF_,-T01x);
for qwUC = 1:GIw3
HO4I = giF_(qwUC,1);
uQuc = sum(B == -HO4I);
if uQuc == 0
if giF_(qwUC,2) >= 2
[sixk D13Q] = find(B == HO4I);
KmMM = size(sixk,1);
B3EU = KmMM*(KmMM-1)/2;
dist = zeros(B3EU,3);
ZZON = 0;
for tbC4 = 1:KmMM
for vaj5 = (tbC4+1):KmMM
ZZON = ZZON + 1;
dist(ZZON,1) = tbC4;
dist(ZZON,2) = vaj5;
dist(ZZON,3) = abs(sixk(tbC4)-sixk(vaj5)) + abs(D13Q(tbC4)-D13Q(vaj5));
end
end
[WiqQ eVfq] = sort(dist(:,3));
dist = dist(eVfq,:);
maxstep = min((i_xW*25)+ys1O,2*HO4I+1);
BZyp = false;
for ZZON = 1:B3EU
if dist(ZZON,3) > maxstep+1
break
end
tbC4 = dist(ZZON,1);
vaj5 = dist(ZZON,2);
path = gYJA(B,eYmK,Jtlc,[sixk(tbC4); sixk(vaj5)], [D13Q(tbC4); D13Q(vaj5)], -HO4I, i_xW, ys1O, 2*HO4I);
if size(path,1) > 0
W = [W; path];
B = F694(B,path,-HO4I);
GnDY();
BZyp = true;
break
end
end
if ~BZyp
continue
end
end
end
[sixk D13Q] = find(B == HO4I);
HDcu = size(sixk,1);
maxstep = min((i_xW*25)+ys1O,HO4I+1);
for bif9 = 1:HDcu
[SLvu NR1w] = find(B == -HO4I);
[sixk D13Q] = find(B == HO4I);
BZyp = false;
path = nSUA(B,eYmK,Jtlc,SLvu,NR1w,sixk,D13Q, -HO4I, i_xW, ys1O, HO4I);
if size(path,1) > 0
W = [W; path];
B = F694(B,path,-HO4I);
GnDY();
BZyp = true;
end
if ~BZyp
break
end
end
end
end
function path = nSUA(B,uwvp,THFM,rowS,colS,Mzw2,AVHH,Mtfl,i_xW,cT1x,Q613)
function path = bncW(UPFW,step)
qoQn(UPFW) = HhIr;
path = zeros(step,4);
eT4N = 0;
QrT5 = 0;
usfW = zeros(step,1);
pq1c = zeros(step,1);
B7TG = zeros(step,1);
while isempty(find(zfqO==UPFW,1))
eT4N = eT4N + 1;
usfW(eT4N,1) = UPFW;
bOW1 = qoQn(UPFW);
pq1c(eT4N,1) = bOW1;
UPFW = bOW1;
if BIcb(UPFW)
QrT5 = QrT5 + 1;
B7TG(QrT5,1) = UPFW;
end
end
usfW = [ usfW(1:eT4N,:) ; B7TG(1:QrT5,1) ];
pq1c = [ pq1c(1:eT4N,:) ; B7TG(1:QrT5,1) ];
path = [ mod(usfW,HMzu) , ceil(usfW/HMzu) , mod(pq1c,HMzu) , ceil(pq1c/HMzu) ];
end
[HMzu i0DD] = size(B);
BIcb = false(HMzu,i0DD);
qoQn = zeros(HMzu,i0DD);
fwwV = -ones(HMzu,i0DD);
zfqO = rowS + (colS-1)*HMzu;
fwwV(zfqO) = 0;
fwwV(Mzw2 + (AVHH-1)*HMzu) = -2;
maxstep = min((i_xW*25)+cT1x,Q613+1);
xpV0 = zeros(maxstep+26,1);
oIzf = [-1 1];
for step = 0:maxstep
if step == 0
N6vt = zfqO;
elseif xpV0(step) == 0
continue
else
N6vt = find(fwwV == step);
end
KmMM = numel(N6vt);
for qwUC = 1:KmMM
HhIr = N6vt(qwUC);
for yiuE = 1:2
UPFW = HhIr + oIzf(yiuE) * HMzu;
oeO4 = fwwV(UPFW);
if oeO4 == -2
path = bncW(UPFW,step+1);
return
elseif oeO4 == -1
if B(UPFW) == 0
fwwV(UPFW) = step+1; xpV0(step+1) = 1;
qoQn(UPFW) = HhIr;
elseif uwvp(UPFW)
fwwV(UPFW) = step+26; xpV0(step+26) = 1;
qoQn(UPFW) = HhIr;
BIcb(UPFW) = true;
end
end
end
for yiuE = 1:2
UPFW = HhIr + oIzf(yiuE);
oeO4 = fwwV(UPFW);
if oeO4 == -2
path = bncW(UPFW,step+1);
return
elseif oeO4 == -1
if B(UPFW) == 0
fwwV(UPFW) = step+1; xpV0(step+1) = 1;
qoQn(UPFW) = HhIr;
elseif THFM(UPFW)
fwwV(UPFW) = step+26; xpV0(step+26) = 1;
qoQn(UPFW) = HhIr;
BIcb(UPFW) = true;
end
end
end
end
end
path = zeros(0,4);
end
function path = YRI6(B,rowS,colS,LJNi,XTzf,Mtfl,egft,Q613)
[HMzu i0DD] = size(B);
AO8X = zeros(HMzu,i0DD);
KUUd = zeros(HMzu,i0DD);
fwwV = -ones(HMzu,i0DD);
fwwV(rowS+(colS-1)*HMzu) = 0;
fwwV(LJNi+(XTzf-1)*HMzu) = -2;
nVUl = zeros(HMzu*i0DD,1);
LTpa = zeros(HMzu*i0DD,1);
count = numel(rowS);
nVUl(1:count) = rowS;
LTpa(1:count) = colS;
hCg6=[-1 1 0 0];
D04X=[0 0 -1 1];
for step = 0:min(egft,Q613)
if count < 1, break, end
KmMM = count;
A3Du = nVUl(1:KmMM);
X1WJ = LTpa(1:KmMM);
count = 0;
for qwUC = 1:KmMM
BTPl = X1WJ(qwUC);
HhIr = A3Du(qwUC);
for ECxh=1:4
WBzF = HhIr + hCg6(ECxh);
XNQN = BTPl + D04X(ECxh);
UPFW = WBzF + (XNQN-1)*HMzu;
oeO4 = fwwV(UPFW);
if oeO4 == -2
Di8u=step+1;
AO8X(WBzF,XNQN) = A3Du(qwUC);
KUUd(WBzF,XNQN) = X1WJ(qwUC);
path = zeros(Di8u,4);
for bif9 = 1:Di8u
path(bif9,1:2) = [WBzF XNQN];
zzao = AO8X(WBzF,XNQN);
VkEz = KUUd(WBzF,XNQN);
path(bif9,3:4) = [zzao VkEz];
WBzF = zzao;
XNQN = VkEz;
end
return
end
if oeO4 == -1 && B(UPFW) == 0
fwwV(UPFW) = step+1;
AO8X(UPFW) = HhIr;
KUUd(UPFW) = BTPl;
count = count + 1; nVUl(count) = WBzF; LTpa(count) = XNQN;
end
end
end
end
path = [];
end
|