ID:49677
Title:Marco Tullio 138
Author:Fabio Carnevale
Date:2008-05-07 11:57:00
Score:13427.5402
Result:133919.00 (cyc: 17, node: 6544)
CPU Time:36.0339
Status:Passed
Comments:
Based on:none
Code:
function W = solv(B)
ImS2=1099;
xPHx = rand(43,1);
W=yCoV(B);
fmV7 = b3Wq(B,W);
[QmRR,Y8B5] = size(B);
at7S = B(QmRR:-1:1,:);
at7S = at7S.';
[NV8Y,CCl6] = rZFX(at7S,[1 2],[1 2],4*QmRR*Y8B5);
if fmV7 > CCl6
W = [QmRR-NV8Y(:,2)+1 NV8Y(:,1) QmRR-NV8Y(:,4)+1 NV8Y(:,3)];
fmV7=CCl6;
end
AHTG=rand('state');
rand(ImS2,1);
if fmV7>1000
[NV8Y,CCl6] = rZFX(at7S,[1 2],[1 2],4*QmRR*Y8B5);
if fmV7 > CCl6
W = [QmRR-NV8Y(:,2)+1 NV8Y(:,1) QmRR-NV8Y(:,4)+1 NV8Y(:,3)];
fmV7=CCl6;
end
end
rand('state',AHTG);
end
function [W,fmV7] = rZFX(nwUx,HRjg,QOBN,C459)
[cDT0,fMWI]=size(nwUx);
s9DV= -ones(cDT0+2,fMWI+2);
s9DV(2:end-1,2:end-1)=nwUx;
YFvG = s9DV;
iewZ = 4;
if size(YFvG,2) > 20
gvKx = 4;
gnEk = 8;
wjmT = 18;
else
gvKx = 3;
gnEk = 7;
wjmT = 13;
end
fmV7 = inf;
S29d = [1 2;2 1];
PgAa = [1 3;3 1];
PPDJ = [3 2 1;1 2 3];
for ztvb = HRjg
if ztvb == 2
[ATjy bTgd] = hWBR(YFvG,gvKx,S29d(ztvb,:));
[PEvY UL19] = Z6vA(bTgd,ATjy,gnEk,PgAa(ztvb,:));
[cLsw o_MV] = Z6vA(UL19,PEvY,wjmT,PgAa(ztvb,:));
else
[ATjy bTgd] = hWBR(YFvG,4,S29d(ztvb,:));
[cLsw o_MV] = Z6vA(bTgd,ATjy,11,PgAa(ztvb,:));
end
for sFfm = QOBN
mZjY = UL6H(YFvG,o_MV,cLsw,iewZ,wjmT,PPDJ(sFfm,:))-1;
Izi6 = b3Wq(nwUx,mZjY);
if Izi6 <= fmV7
fmV7 = Izi6;
W = mZjY;
iewZ = iewZ - 1;
end
end
end
end
function S_IW = b3Wq(B,W)
cDT0=size(B,1);
B(W(:,1)+(W(:,2)-1)*cDT0)=0;
B(W(:,3)+(W(:,4)-1)*cDT0)=0;
S_IW=sum(B(:))+size(W,1)+sum(W(:,1)==W(:,3)&W(:,2)==W(:,4))*24;
end
function [c01c XLwh] = uvPC(B,abDC)
BO5h = sort(B(B>0),'descend');
FIne = size(BO5h,1);
if FIne < 1
c01c = [];
XLwh = 0;
return
end
iSl2=BO5h(diff([0;BO5h])~=0);
c01c = zeros(nnz(iSl2),3);
c2TU=histc(BO5h,iSl2(end:-1:1));
c01c(:,1)=iSl2;
c01c(:,2)=c2TU(end:-1:1);
XLwh=nnz(iSl2);
if abDC < 3, return, end
for Fh45 = 1:XLwh
if c01c(Fh45,2) >= 2
gaVT = c01c(Fh45,1);
[C077 DrXE] = find(B == gaVT);
p1T_ = 0;
WOsz = size(C077,1);
p1T_=sum(abs(diff(C077))+abs(diff(DrXE)));
c01c(Fh45,3) = c01c(Fh45,2)*gaVT - 0.85 * p1T_;
end
end
end
function [W B] = hWBR(B,wjmT,abDC)
W = [];
[c01c XLwh] = uvPC(B,abDC);
if XLwh < 1
return
end
c01c=sortrows(c01c,-abDC);
for Fh45 = 1:XLwh
if c01c(Fh45,2) >= 2
gaVT = c01c(Fh45,1);
[C077 DrXE] = find(B == gaVT);
WOsz = size(C077,1);
jXkH = WOsz*(WOsz-1)/2;
dist = zeros(jXkH,3);
[SrYP so86]=find(tril(ones(WOsz),-1));
dist(:,1)=so86;
dist(:,2)=SrYP;
dist(:,3)=abs(DrXE(SrYP)-DrXE(so86))+abs(C077(SrYP)-C077(so86));
[p1T_ Cj6i] = sort(dist(:,3));
dist = dist(Cj6i,:);
FIne = 0;
for ztvb = 1:jXkH
if dist(ztvb,3) > wjmT+1
break
end
AAFE = dist(ztvb,1);
bwpT = dist(ztvb,2);
path = YHh0(B,[C077(AAFE); C077(bwpT)], [DrXE(AAFE); DrXE(bwpT)], -gaVT, wjmT, 2*gaVT);
if size(path,1) > 0
W = [W; path];
B = QwpM(B,path,-gaVT);
FIne = 2;
edit = [1:(AAFE-1) (AAFE+1):(bwpT-1) (bwpT+1):WOsz];
C077 = [C077(AAFE); C077(bwpT); C077(edit)];
DrXE = [DrXE(AAFE); DrXE(bwpT); DrXE(edit)];
break
else
end
end
if FIne < 2
continue
end
for qbQ1 = 3:WOsz
[dQvk CdFq] = find(B == -gaVT);
dCUo = size(dQvk,1);
jXkH =  dCUo * (WOsz - FIne);
DfO9 = (1:dCUo*WOsz)';
bwpT=mod(DfO9-1,WOsz)+1;
AAFE=ceil(DfO9/WOsz);
WANv = (bwpT>FIne);
AAFE = AAFE(WANv);
bwpT = bwpT(WANv);
p1T_ = abs(dQvk(AAFE)-C077(bwpT)) + abs(CdFq(AAFE)-DrXE(bwpT));
dist = [AAFE,bwpT,p1T_];
[p1T_ Cj6i] = sort(dist(:,3));
dist = dist(Cj6i,:);
t4bt = false(WOsz,1);
J3za = false;
for ztvb = 1:jXkH
if dist(ztvb,3) > wjmT+1
break
end
bwpT = dist(ztvb,2);
if t4bt(bwpT)
randperm(4);
continue
end
AAFE = dist(ztvb,1);
path = YHh0(B,[dQvk(AAFE); C077(bwpT)], [CdFq(AAFE); DrXE(bwpT)], -gaVT, wjmT, gaVT);
t4bt(bwpT)=true;
if size(path,1) > 0
W = [W; path];
B = QwpM(B,path,-gaVT);
FIne = FIne + 1;
J3za = true;
C077([qbQ1 bwpT]) = C077([bwpT qbQ1]);
DrXE([qbQ1 bwpT]) = DrXE([bwpT qbQ1]);
break
end
end
if ~J3za
break
end
end
end
end
end
function [W B] = Z6vA(B,W,iSjo,abDC)
[c01c XLwh] = uvPC(B,abDC);
if XLwh < 1, return, end
c01c=sortrows(c01c,-abDC);
for Fh45 = 1:XLwh
gaVT = c01c(Fh45,1);
dCUo = sum(B == -gaVT);
if dCUo == 0
if c01c(Fh45,2) >= 2
[C077 DrXE] = find(B == gaVT);
WOsz = size(C077,1);
jXkH = WOsz*(WOsz-1)*.5;
DfO9 = (1:WOsz*WOsz)';
bwpT=mod(DfO9-1,WOsz)+1;
AAFE=ceil(DfO9/WOsz);
WANv = (AAFE<bwpT);
AAFE = AAFE(WANv);
bwpT = bwpT(WANv);
p1T_ = abs(C077(AAFE)-C077(bwpT)) + abs(DrXE(AAFE)-DrXE(bwpT));
dist = [AAFE,bwpT,p1T_];
[p1T_ Cj6i] = sort(dist(:,3));
dist = dist(Cj6i,:);
maxstep = min(iSjo,2*gaVT+1);
J3za = false;
for ztvb = 1:jXkH
if dist(ztvb,3) > maxstep+1
break
end
AAFE = dist(ztvb,1);
bwpT = dist(ztvb,2);
path = YHh0(B,[C077(AAFE); C077(bwpT)], [DrXE(AAFE); DrXE(bwpT)], -gaVT, iSjo, 2*gaVT);
if size(path,1) > 0
W = [W; path];
B = QwpM(B,path,-gaVT);
J3za = true;
break
end
end
if ~J3za
continue
end
end
end
[C077 DrXE] = find(B == gaVT);
QW4l = size(C077,1);
maxstep = min(iSjo,gaVT+1);
for qbQ1 = 1:QW4l
[dQvk CdFq] = find(B == -gaVT);
dCUo = size(dQvk,1);
jXkH =  dCUo * (QW4l-qbQ1+1);
dist = zeros(jXkH,3);
ztvb = 0;
for AAFE = 1:dCUo
for bwpT = qbQ1:QW4l
ztvb = ztvb + 1;
dist(ztvb,1) = AAFE;
dist(ztvb,2) = bwpT;
dist(ztvb,3) = abs(dQvk(AAFE)-C077(bwpT)) + abs(CdFq(AAFE)-DrXE(bwpT));
end
end
[p1T_ Cj6i] = sort(dist(:,3));
dist = dist(Cj6i,:);
t4bt = false(QW4l,1);
J3za = false;
for ztvb = 1:jXkH
if dist(ztvb,3) > maxstep+1
break
end
bwpT = dist(ztvb,2);
if t4bt(bwpT)
randperm(4);
continue
end
AAFE = dist(ztvb,1);
path = YHh0(B,[dQvk(AAFE); C077(bwpT)], [CdFq(AAFE); DrXE(bwpT)], -gaVT, iSjo, 2*gaVT);
t4bt(bwpT)=true;
if size(path,1) > 0
W = [W; path];
B = QwpM(B,path,-gaVT);
J3za = true;
C077([qbQ1 bwpT]) = C077([bwpT qbQ1]);
DrXE([qbQ1 bwpT]) = DrXE([bwpT qbQ1]);
break
end
end
if ~J3za
break
end
end
end
end
function [D_fM QCce] = LzU7(s9DV,B,path)
[M_YJ cYgX] = size(B);
D_fM = s9DV == 0;
QCce = D_fM;
D_fM(:,[1 cYgX]) = false;
QCce([1 M_YJ],:) = false;
for Fh45 = 1:size(path,1)
if path(Fh45,1) == path(Fh45,3)
D_fM(path(Fh45,1),path(Fh45,2)) = false;
D_fM(path(Fh45,3),path(Fh45,4)) = false;
end
if path(Fh45,2) == path(Fh45,4)
QCce(path(Fh45,1),path(Fh45,2)) = false;
QCce(path(Fh45,3),path(Fh45,4)) = false;
end
end
end
function B = QwpM(B,path,NznT)
B(path(1,1),path(1,2)) = NznT;
for Fh45 = 1:size(path,1);
B(path(Fh45,3),path(Fh45,4)) = NznT;
end
end
function path = VDad(FGHD,XZqY,M_YJ,L2SO)
path = zeros(L2SO,4);
BkUs = mod(FGHD,M_YJ);
gMr7 = ceil(FGHD/M_YJ);
for qbQ1 = 1:L2SO
path(qbQ1,1:2) = [BkUs gMr7];
FGHD = XZqY(FGHD);
BkUs = mod(FGHD,M_YJ);
gMr7 = ceil(FGHD/M_YJ);
path(qbQ1,3:4) = [BkUs gMr7];
end
end
function path = YHh0(B,C077,DrXE,NznT,wjmT,ch1G)
[M_YJ cYgX] = size(B);
XZqY = zeros(M_YJ,cYgX);
tRxL = -ones(M_YJ,cYgX);
tRxL(C077(2),DrXE(2)) = 0;
tRxL(C077(1),DrXE(1)) = -2;
tRxL( B == NznT ) = -2;
c8D3 = zeros(M_YJ*cYgX,1);
c8D3(1) = C077(2) + (DrXE(2)-1)*M_YJ;
count = 1;
GPI5 = [-1 1 -M_YJ M_YJ];
l9bt = randperm(4);
for step = 0:min(wjmT,ch1G)
if count < 1, break, end
WOsz = count;
FGHD = c8D3;
count = 0;
for Fh45 = 1:WOsz
GyKu = FGHD(Fh45);
for f8E3=1:4
ZyRy = GyKu + GPI5(l9bt(f8E3));
nvhF = tRxL(ZyRy);
if nvhF == -2
XZqY(ZyRy) = GyKu;
path = VDad(ZyRy,XZqY,M_YJ,step+1);
return
end
if nvhF == -1 && B(ZyRy) == 0
tRxL(ZyRy) = step+1;
XZqY(ZyRy) = GyKu;
count = count + 1;
c8D3(count) = ZyRy;
end
end
end
end
path = [];
end
function path = Da7g(B,D_fM,QCce,C077,DrXE,NznT,iewZ,iSjo,ch1G)
[M_YJ cYgX] = size(B);
iBec = false(M_YJ,cYgX);
XZqY = zeros(M_YJ,cYgX);
tRxL = -ones(M_YJ,cYgX);
tRxL(C077(1),DrXE(1)) = -2;
tRxL( B == NznT ) = -2;
maxstep = min((iewZ*27)+iSjo,ch1G+1);
SSno = zeros(maxstep+28,1);
SSno(1) = C077(2) + (DrXE(2)-1)*M_YJ;
GPI5 = [-M_YJ M_YJ -1 1];
for step = 1:maxstep
while SSno(step)>0
GyKu = SSno(step);
SSno(step)=tRxL(GyKu);
for f8E3 = 1:4
ZyRy = GyKu + GPI5(f8E3);
nvhF = tRxL(ZyRy);
if nvhF==-1
if B(ZyRy) == 0
tRxL(ZyRy) = SSno(step+1);
SSno(step+1) = ZyRy;
XZqY(ZyRy) = GyKu;
elseif (D_fM(ZyRy)&&(f8E3<3)) || (QCce(ZyRy)&&(f8E3>2))
tRxL(ZyRy) = SSno(step+26);
SSno(step+26) = ZyRy;
XZqY(ZyRy) = GyKu;
iBec(ZyRy) = true;
end
end
if nvhF==-2
step=step+1;
XZqY(ZyRy) = GyKu;
BkUs=mod(ZyRy,M_YJ);
gMr7=ceil(ZyRy/M_YJ);
path = zeros(step,4);
qbQ1 = 0;
while BkUs ~= C077(2) || gMr7 ~= DrXE(2)
qbQ1 = qbQ1 + 1;
path(qbQ1,1:2) = [BkUs gMr7];
ZyRy = BkUs + (gMr7-1)*M_YJ;
mtBl = XZqY(ZyRy);
BIwN=mod(mtBl,M_YJ);
m6fn=ceil(mtBl/M_YJ);
path(qbQ1,3:4) = [BIwN m6fn];
BkUs = BIwN;
gMr7 = m6fn;
if iBec(BkUs,gMr7)
qbQ1 = qbQ1 + 1;
path(qbQ1,:) = [BkUs gMr7 BkUs gMr7];
end
end
path = path(1:qbQ1,:);
return
end
end
end
end
path = [];
end
function W = yCoV(B)
[W,fmV7] = CErw(B);
lktx = 0;
JrRM = round(mod(B(:),2));
if fmV7 < 2100
return
end
[PpRt,XAXA] = size(B);
B = flipud(fliplr(B'));
[X1Sw,gnD7] = CErw(B);
if fmV7 > gnD7
W = [PpRt-X1Sw(:,2)+1 XAXA-X1Sw(:,1)+1 PpRt-X1Sw(:,4)+1 XAXA-X1Sw(:,3)+1];
end
if JrRM~=lktx;        W = zeros(0,4);    end
end
function [W,fmV7] = CErw(B)
[cDT0,fMWI]=size(B);
fTqm=nan(cDT0+2,fMWI+2);
fTqm(2:end-1,2:end-1)=B;
YFvG = fTqm;
iewZ = 4;
if size(YFvG,2) > 20
gvKx = 4;
gnEk = 8;
wjmT = 12;
else
gvKx = 3;
gnEk = 7;
wjmT = 11;
end
fmV7 = inf;
S29d = [1 2;2 1];
PgAa = [1 3;3 1];
PPDJ = [3 2 1;1 2 3];
for ztvb = 1:2
if ztvb == 2
[ATjy bTgd] = cgDS(YFvG,gvKx,S29d(ztvb,:));
[PEvY UL19] = a9Fz(bTgd,ATjy,gnEk,PgAa(ztvb,:));
[cLsw o_MV] = a9Fz(UL19,PEvY,wjmT,PgAa(ztvb,:));
else
[ATjy bTgd] = cgDS(YFvG,4,S29d(ztvb,:));
[cLsw o_MV] = a9Fz(bTgd,ATjy,11,PgAa(ztvb,:));
end
for sFfm = 1:2
if ztvb == 2 && sFfm == 2 && fmV7 > 2100, return, end
mZjY = UL6H(YFvG,o_MV,cLsw,iewZ,wjmT,PPDJ(sFfm,:))-1;
Izi6 = b3Wq(B,mZjY);
if Izi6 <= fmV7
fmV7 = Izi6;
W = mZjY;
iewZ = iewZ - 1;
end
end
end
if cDT0*fMWI > 290; return; end
GmlN = sum(W(:,1)==W(:,3)&W(:,2)==W(:,4));
if GmlN <= 4
SU7O = DP6Q(B);
XQJm = b3Wq(B,SU7O);
if XQJm < fmV7
W = SU7O;
fmV7 = XQJm;
end
end
end
function path = d7JH(B,C077,DrXE,NznT,wjmT,ch1G)
function path = ZLr4(Qi32,Sy0D,Zs56)
eHRj(Qi32,Sy0D) = TZxR(Fh45);
xiTV(Qi32,Sy0D) = Bo2c(Fh45);
path = zeros(Zs56,4);
for Cry2 = 1:Zs56
path(Cry2,1:2) = [Qi32 Sy0D];
oiRz = eHRj(Qi32,Sy0D);
RNdg = xiTV(Qi32,Sy0D);
path(Cry2,3:4) = [oiRz RNdg];
Qi32 = oiRz;
Sy0D = RNdg;
end
end
[M_YJ cYgX] = size(B);
eHRj = zeros(M_YJ,cYgX);
xiTV = zeros(M_YJ,cYgX);
tRxL = -ones(M_YJ,cYgX);
tRxL(C077(2),DrXE(2)) = 0;
tRxL(C077(1),DrXE(1)) = -2;
tRxL( B == NznT ) = -2;
Ucw_ = zeros(M_YJ*cYgX,1);
hiu3 = zeros(M_YJ*cYgX,1);
count = 1;
Ucw_(1) = C077(2);
hiu3(1) = DrXE(2);
ARB6=[-1 1 0 0];
sghH=[0 0 -1 1];
for step = 0:min(wjmT,ch1G)
if count < 1, break, end
WOsz = count;
TZxR = Ucw_(1:WOsz);
Bo2c = hiu3(1:WOsz);
count = 0;
for Fh45 = 1:WOsz
aWC5 = Bo2c(Fh45);
GyKu = TZxR(Fh45);
for f8E3=1:4
Qi32 = GyKu + ARB6(f8E3);
Sy0D = aWC5 + sghH(f8E3);
ZyRy = Qi32 + (Sy0D-1)*M_YJ;
nvhF = tRxL(ZyRy);
if nvhF == -2
path = ZLr4(Qi32,Sy0D,step+1);
return
elseif nvhF == -1 && B(ZyRy) == 0
tRxL(ZyRy) = step+1;
eHRj(ZyRy) = GyKu;
xiTV(ZyRy) = aWC5;
count = count + 1; Ucw_(count) = Qi32; hiu3(count) = Sy0D;
end
end
end
end
path = [];
end
function eVXv = DP6Q(bwpT)
gaVT = unique(bwpT);
gaVT(1) = [];
seLF = zeros(size(gaVT));
for Fh45 = 1:length(seLF)
seLF(Fh45) = nnz(gaVT(Fh45) == bwpT(:));
end
for Fh45 = 1:length(seLF)
if seLF(Fh45) == 1
bwpT(gaVT(Fh45) == bwpT(:)) = -1;
end
end
yIbN = zeros(size(bwpT)+2);
fZxB = repmat(-1,size(yIbN));
fZxB(2:end-1,2:end-1) = bwpT;
eVXv = [];
[sC9k, vtUN] = find(fZxB>0);
p1T_ = (size(fZxB,1)/2 - sC9k).^2 + (size(fZxB,2)/2 - vtUN).^2;
[p1T_, order] = sort(p1T_);
order = order';
for XLwh = 1:length(sC9k)-1
l49y = 0;
vhFV = 32;
for Fh45 = order
if yIbN(sC9k(Fh45), vtUN(Fh45))
continue
end
[S_IW, mlAl, YHoB] = iU5x(fZxB, yIbN, sC9k(Fh45), vtUN(Fh45), vhFV);
if S_IW > l49y
l49y = S_IW;
vjGX = mlAl;
vhFV = YHoB;
if vhFV == 1
break
end
end
end
if l49y == 0
eVXv = eVXv - 1;
return
end
yIbN = QwpM(yIbN, vjGX, fZxB(vjGX(1,1), vjGX(1,2)));
fZxB = QwpM(fZxB, vjGX, fZxB(vjGX(1,1), vjGX(1,2)));
eVXv = [eVXv; vjGX];
end
eVXv = eVXv - 1;
end
function [l49y, vjGX, vhFV] = iU5x(bwpT, yIbN, FGHD, Bo2c, CRfe)
l49y = 0;
vjGX = [];
Cry2 = [1 -1 0 0];
XLwh = [0 0 1 -1];
if ~any(yIbN(:)==bwpT(FGHD,Bo2c))
yIbN = bwpT;
end
fZxB = bwpT;
fZxB(fZxB>0) = -1;
fZxB(FGHD,Bo2c) = 1;
vhFV = Inf;
gaVT = bwpT(FGHD,Bo2c);
for Fh45 = 1:CRfe-2
[sC9k, vtUN] = find(fZxB==Fh45);
for seLF = 1:length(sC9k)
for l_lh = 1:4
fMOe = sC9k(seLF) + Cry2(l_lh);
GC2q = vtUN(seLF) + XLwh(l_lh);
if yIbN(fMOe,GC2q) == gaVT && ~(fMOe == FGHD && GC2q == Bo2c)
vhFV = Fh45;
break
end
yBcv = fZxB(fMOe,GC2q);
if yBcv == 0
fZxB(fMOe,GC2q) = Fh45+1;
end
end
if vhFV < Inf
break
end
end
if vhFV < Inf
break
end
end
if vhFV == Inf
return
end
l49y = bwpT(FGHD,Bo2c) - vhFV;
if vhFV == 1
vjGX = [FGHD, Bo2c, fMOe, GC2q];
return
end
vjGX = zeros(vhFV,4);
for step = vhFV:-1:1
for l_lh = 1:4
MiPG = fMOe + Cry2(l_lh);
dErX = GC2q + XLwh(l_lh);
if fZxB(MiPG, dErX) == step
break
end
end
vjGX(step,:) = [MiPG, dErX, fMOe, GC2q];
fMOe = MiPG;
GC2q = dErX;
end
end
function [W B] = cgDS(B,wjmT,abDC)
W = [];
[c01c XLwh] = uvPC(B,abDC);
if XLwh < 1
return
end
c01c=sortrows(c01c,-abDC);
for Fh45 = 1:XLwh
if c01c(Fh45,2) >= 2
gaVT = c01c(Fh45,1);
[C077 DrXE] = find(B == gaVT);
WOsz = size(C077,1);
jXkH = WOsz*(WOsz-1)/2;
dist = zeros(jXkH,3);
ztvb = 0;
for AAFE = 1:WOsz
for bwpT = (AAFE+1):WOsz
ztvb = ztvb + 1;
dist(ztvb,1) = AAFE;
dist(ztvb,2) = bwpT;
dist(ztvb,3) = abs(C077(AAFE)-C077(bwpT)) + abs(DrXE(AAFE)-DrXE(bwpT));
end
end
[p1T_ Cj6i] = sort(dist(:,3));
dist = dist(Cj6i,:);
YpA1 = reshape(dist(:,1:2)',[],1);
FIne = 0;
FB4H = 1;
jZNT = false(WOsz,1);
for Fh45=1:WOsz
gdeF = find( ~jZNT(YpA1(FB4H:end)) , 1 , 'first');
if isempty(gdeF)
break
end
AAFE = YpA1(gdeF);
Distance = abs(C077([1:AAFE-1,AAFE+1:end]')-C077(AAFE)) + abs(DrXE([1:AAFE-1,AAFE+1:end]')-DrXE(AAFE));
if max(Distance)>wjmT-1
break
end
path = gnUw(B,C077(AAFE),DrXE(AAFE),C077([1:AAFE-1,AAFE+1:end]'),DrXE([1:AAFE-1,AAFE+1:end]'), -gaVT, wjmT, 2*gaVT);
if size(path,1) > 0
W = [W; path];
B = QwpM(B,path,-gaVT);
FIne = 2;
break
end
end
if FIne < 2
continue
end
for Cry2 = 3:WOsz
[dQvk CdFq] = find(B == -gaVT);
[C077 DrXE] = find(B == gaVT);
[ie_H,GVLb] = meshgrid(C077,dQvk);
[rKsX,G2uy] = meshgrid(C077,dQvk);
Distance = abs(ie_H-GVLb) + abs(rKsX-G2uy);
if max(Distance(:))>wjmT-1
break
end
path = gnUw(B,dQvk,CdFq,C077,DrXE, -gaVT, wjmT, 2*gaVT);
if size(path,1) > 0
W = [W; path];
B = QwpM(B,path,-gaVT);
J3za = true;
else
break
end
end
end
end
end
function [W B] = a9Fz(B,W,MDRC,abDC)
[c01c XLwh] = uvPC(B,abDC);
if XLwh < 1, return, end
c01c=sortrows(c01c,-abDC);
for Fh45 = 1:XLwh
gaVT = c01c(Fh45,1);
dCUo = sum(B == -gaVT);
if dCUo == 0
if c01c(Fh45,2) >= 2
[C077 DrXE] = find(B == gaVT);
WOsz = size(C077,1);
jXkH = WOsz*(WOsz-1)/2;
dist = zeros(jXkH,3);
ztvb = 0;
for AAFE = 1:WOsz
for bwpT = (AAFE+1):WOsz
ztvb = ztvb + 1;
dist(ztvb,1) = AAFE;
dist(ztvb,2) = bwpT;
dist(ztvb,3) = abs(C077(AAFE)-C077(bwpT)) + abs(DrXE(AAFE)-DrXE(bwpT));
end
end
[p1T_ Cj6i] = sort(dist(:,3));
dist = dist(Cj6i,:);
maxstep = min(MDRC,2*gaVT+1);
J3za = false;
for ztvb = 1:jXkH
if dist(ztvb,3) > maxstep+1
break
end
AAFE = dist(ztvb,1);
bwpT = dist(ztvb,2);
path = d7JH(B,[C077(AAFE); C077(bwpT)], [DrXE(AAFE); DrXE(bwpT)], -gaVT, MDRC, 2*gaVT);
if size(path,1) > 0
W = [W; path];
B = QwpM(B,path,-gaVT);
J3za = true;
break
end
end
if ~J3za
continue
end
end
end
[C077 DrXE] = find(B == gaVT);
HJze = size(C077,1);
maxstep = min(MDRC,gaVT+1);
for Cry2 = 1:HJze
[dQvk CdFq] = find(B == -gaVT);
[C077 DrXE] = find(B == gaVT);
J3za = false;
path = gnUw(B,dQvk,CdFq,C077,DrXE, -gaVT, MDRC, gaVT);
if size(path,1) > 0
W = [W; path];
B = QwpM(B,path,-gaVT);
J3za = true;
end
if ~J3za
break
end
end
end
end
function [W B] = UL6H(fTqm,B,W,iewZ,MDRC,abDC)
function mfsu()
for eVXv = 1:size(path,1);
if path(eVXv,1) == path(eVXv,3)
r_AF(path(eVXv,1),path(eVXv,2)) = false;
r_AF(path(eVXv,3),path(eVXv,4)) = false;
if path(eVXv,2) == path(eVXv,4)
B(path(eVXv,1),path(eVXv,2)) = -9999;
end
end
if path(eVXv,2) == path(eVXv,4)
vo5m(path(eVXv,1),path(eVXv,2)) = false;
vo5m(path(eVXv,3),path(eVXv,4)) = false;
end
end
end
[r_AF vo5m] = LzU7(fTqm,B,W);
[c01c XLwh] = uvPC(B,abDC);
if XLwh < 1, return, end
c01c=sortrows(c01c,-abDC);
for Fh45 = 1:XLwh
gaVT = c01c(Fh45,1);
dCUo = sum(B == -gaVT);
if dCUo == 0
if c01c(Fh45,2) >= 2
[C077 DrXE] = find(B == gaVT);
WOsz = size(C077,1);
jXkH = WOsz*(WOsz-1)/2;
dist = zeros(jXkH,3);
ztvb = 0;
for AAFE = 1:WOsz
for bwpT = (AAFE+1):WOsz
ztvb = ztvb + 1;
dist(ztvb,1) = AAFE;
dist(ztvb,2) = bwpT;
dist(ztvb,3) = abs(C077(AAFE)-C077(bwpT)) + abs(DrXE(AAFE)-DrXE(bwpT));
end
end
[p1T_ Cj6i] = sort(dist(:,3));
dist = dist(Cj6i,:);
maxstep = min((iewZ*25)+MDRC,2*gaVT+1);
J3za = false;
for ztvb = 1:jXkH
if dist(ztvb,3) > maxstep+1
break
end
AAFE = dist(ztvb,1);
bwpT = dist(ztvb,2);
path = Da7g(B,r_AF,vo5m,[C077(AAFE); C077(bwpT)], [DrXE(AAFE); DrXE(bwpT)], -gaVT, iewZ, MDRC, 2*gaVT);
if size(path,1) > 0
W = [W; path];
B = QwpM(B,path,-gaVT);
mfsu();
J3za = true;
break
end
end
if ~J3za
continue
end
end
end
[C077 DrXE] = find(B == gaVT);
HJze = size(C077,1);
maxstep = min((iewZ*25)+MDRC,gaVT+1);
for Cry2 = 1:HJze
[dQvk CdFq] = find(B == -gaVT);
[C077 DrXE] = find(B == gaVT);
J3za = false;
path = xPeU(B,r_AF,vo5m,dQvk,CdFq,C077,DrXE, -gaVT, iewZ, MDRC, gaVT);
if size(path,1) > 0
W = [W; path];
B = QwpM(B,path,-gaVT);
mfsu();
J3za = true;
end
if ~J3za
break
end
end
end
end
function path = xPeU(B,D_fM,QCce,rowS,colS,VxHz,QY6r,NznT,iewZ,iSjo,ch1G)
function path = VDad(ZyRy,step)
XZqY(ZyRy) = GyKu;
path = zeros(step,4);
qbQ1 = 0;
k5No = 0;
Kj3S = zeros(step,1);
hL8A = zeros(step,1);
VG0Y = zeros(step,1);
while isempty(find(ka4U==ZyRy,1))
qbQ1 = qbQ1 + 1;
Kj3S(qbQ1,1) = ZyRy;
mtBl = XZqY(ZyRy);
hL8A(qbQ1,1) = mtBl;
ZyRy = mtBl;
if iBec(ZyRy)
k5No = k5No + 1;
VG0Y(k5No,1) = ZyRy;
end
end
Kj3S = [ Kj3S(1:qbQ1,:) ; VG0Y(1:k5No,1) ];
hL8A = [ hL8A(1:qbQ1,:) ; VG0Y(1:k5No,1) ];
path = [ mod(Kj3S,M_YJ) , ceil(Kj3S/M_YJ) ,  mod(hL8A,M_YJ) , ceil(hL8A/M_YJ) ];
end
[M_YJ cYgX] = size(B);
iBec = false(M_YJ,cYgX);
XZqY = zeros(M_YJ,cYgX);
tRxL = -ones(M_YJ,cYgX);
ka4U = rowS + (colS-1)*M_YJ;
tRxL(ka4U) = 0;
tRxL(VxHz + (QY6r-1)*M_YJ) = -2;
maxstep = min((iewZ*25)+iSjo,ch1G+1);
d3Eq = zeros(maxstep+26,1);
M4Hu = [-1 1];
for step = 0:maxstep
if step == 0
FGHD = ka4U;
elseif d3Eq(step) == 0
continue
else
FGHD = find(tRxL == step);
end
WOsz = numel(FGHD);
for Fh45 = 1:WOsz
GyKu = FGHD(Fh45);
for SZsU = 1:2
ZyRy = GyKu + M4Hu(SZsU) * M_YJ;
nvhF = tRxL(ZyRy);
if nvhF == -2
path = VDad(ZyRy,step+1);
return
elseif nvhF == -1
if B(ZyRy) == 0
tRxL(ZyRy) = step+1; d3Eq(step+1) = 1;
XZqY(ZyRy) = GyKu;
elseif D_fM(ZyRy)
tRxL(ZyRy) = step+26; d3Eq(step+26) = 1;
XZqY(ZyRy) = GyKu;
iBec(ZyRy) = true;
end
end
end
for SZsU = 1:2
ZyRy = GyKu + M4Hu(SZsU);
nvhF = tRxL(ZyRy);
if nvhF == -2
path = VDad(ZyRy,step+1);
return
elseif nvhF == -1
if B(ZyRy) == 0
tRxL(ZyRy) = step+1; d3Eq(step+1) = 1;
XZqY(ZyRy) = GyKu;
elseif QCce(ZyRy)
tRxL(ZyRy) = step+26; d3Eq(step+26) = 1;
XZqY(ZyRy) = GyKu;
iBec(ZyRy) = true;
end
end
end
end
end
path = zeros(0,4);
end
function path = gnUw(B,rowS,colS,UuXJ,loob,NznT,wjmT,ch1G)
[M_YJ cYgX] = size(B);
eHRj = zeros(M_YJ,cYgX);
xiTV = zeros(M_YJ,cYgX);
tRxL = -ones(M_YJ,cYgX);
tRxL(rowS+(colS-1)*M_YJ) = 0;
tRxL(UuXJ+(loob-1)*M_YJ) = -2;
c8D3 = zeros(M_YJ*cYgX,1);
hiu3 = zeros(M_YJ*cYgX,1);
count = numel(rowS);
c8D3(1:count) = rowS;
hiu3(1:count) = colS;
ARB6=[-1 1 0 0];
sghH=[0 0 -1 1];
for step = 0:min(wjmT,ch1G)
if count < 1, break, end
WOsz = count;
TZxR = c8D3(1:WOsz);
Bo2c = hiu3(1:WOsz);
count = 0;
for Fh45 = 1:WOsz
aWC5 = Bo2c(Fh45);
GyKu = TZxR(Fh45);
for f8E3=1:4
Qi32 = GyKu + ARB6(f8E3);
Sy0D = aWC5 + sghH(f8E3);
ZyRy = Qi32 + (Sy0D-1)*M_YJ;
nvhF = tRxL(ZyRy);
if nvhF == -2
Zs56=step+1;
eHRj(Qi32,Sy0D) = TZxR(Fh45);
xiTV(Qi32,Sy0D) = Bo2c(Fh45);
path = zeros(Zs56,4);
for Cry2 = 1:Zs56
path(Cry2,1:2) = [Qi32 Sy0D];
oiRz = eHRj(Qi32,Sy0D);
RNdg = xiTV(Qi32,Sy0D);
path(Cry2,3:4) = [oiRz RNdg];
Qi32 = oiRz;
Sy0D = RNdg;
end
return
end
if nvhF == -1 && B(ZyRy) == 0
tRxL(ZyRy) = step+1;
eHRj(ZyRy) = GyKu;
xiTV(ZyRy) = aWC5;
count = count + 1; c8D3(count) = Qi32; hiu3(count) = Sy0D;
end
end
end
end
path = [];
end