Finish 2008-05-07 12:00:00 UTC

Marco Tullio 114

by Fabio

Status: Passed
Results: 133976.00 (cyc: 19, node: 6532)
CPU Time: 35.6105
Score: 13434.6
Submitted at: 2008-05-07 11:55:52 UTC
Scored at: 2008-05-07 16:33:23 UTC

Current Rank: 48th

Comments
Please login or create a profile.
Code
function W = solv(B)
VL6M=18242;
p0vg = rand(43,1);
W=ift6(B);
PeQQ = sQPE(B,W);
[amWT,nq3G] = size(B);
aFT6 = B(amWT:-1:1,:);
aFT6 = aFT6.';
[USI6,I1cZ] = OLWm(aFT6,[1 2],[1 2],4*amWT*nq3G);
if PeQQ > I1cZ
W = [amWT-USI6(:,2)+1 USI6(:,1) amWT-USI6(:,4)+1 USI6(:,3)];
PeQQ=I1cZ;
end
wGtL=rand('state');
rand(VL6M,1);
if PeQQ>1000
[USI6,I1cZ] = OLWm(aFT6,[1 2],[1 2],4*amWT*nq3G);
if PeQQ > I1cZ
W = [amWT-USI6(:,2)+1 USI6(:,1) amWT-USI6(:,4)+1 USI6(:,3)];
PeQQ=I1cZ;
end
end
rand('state',wGtL);
end
function [W,PeQQ] = OLWm(DnBg,R546,AfO0,SkM3)
[OekV,aDof]=size(DnBg);
ltAy= -ones(OekV+2,aDof+2);
ltAy(2:end-1,2:end-1)=DnBg;
ywsw = ltAy;
ESWO = 4;
if size(ywsw,2) > 20
PN_p = 4;
XZge = 8;
HJ3S = 18;
else
PN_p = 3;
XZge = 7;
HJ3S = 13;
end
PeQQ = inf;
g7f6 = [1 2;2 1];
VeQt = [1 3;3 1];
pGCh = [3 2 1;1 2 3];
for Y3bs = R546
if Y3bs == 2
[LdWo xkqi] = u4tX(ywsw,PN_p,g7f6(Y3bs,:));
[zgFc fK2x] = La9y(xkqi,LdWo,XZge,VeQt(Y3bs,:));
[MHkc XErQ] = La9y(fK2x,zgFc,HJ3S,VeQt(Y3bs,:));
else
[LdWo xkqi] = u4tX(ywsw,4,g7f6(Y3bs,:));
[MHkc XErQ] = La9y(xkqi,LdWo,11,VeQt(Y3bs,:));
end
for TsXt = AfO0
DVBH = v1TA(ywsw,XErQ,MHkc,ESWO,HJ3S,pGCh(TsXt,:))-1;
pIZv = sQPE(DnBg,DVBH);
if pIZv <= PeQQ
PeQQ = pIZv;
W = DVBH;
ESWO = ESWO - 1;
end
end
end
end
function EU_f = sQPE(B,W)
OekV=size(B,1);
B(W(:,1)+(W(:,2)-1)*OekV)=0;
B(W(:,3)+(W(:,4)-1)*OekV)=0;
EU_f=sum(B(:))+size(W,1)+sum(W(:,1)==W(:,3)&W(:,2)==W(:,4))*24;
end
function [RApI VcOS] = Ka0u(B,f4e3)
P482 = sort(B(B>0),'descend');
wRET = size(P482,1);
if wRET < 1
RApI = [];
VcOS = 0;
return
end
IVtL=P482(diff([0;P482])~=0);
RApI = zeros(nnz(IVtL),3);
A9QE=histc(P482,IVtL(end:-1:1));
RApI(:,1)=IVtL;
RApI(:,2)=A9QE(end:-1:1);
VcOS=nnz(IVtL);
if f4e3 < 3, return, end
for F6Sl = 1:VcOS
if RApI(F6Sl,2) >= 2
RGEm = RApI(F6Sl,1);
[t0GU AKFe] = find(B == RGEm);
Phrw = 0;
wqei = size(t0GU,1);
Phrw=sum(abs(diff(t0GU))+abs(diff(AKFe)));
RApI(F6Sl,3) = RApI(F6Sl,2)*RGEm - 0.85 * Phrw;
end
end
end
function [W B] = u4tX(B,HJ3S,f4e3)
W = [];
[RApI VcOS] = Ka0u(B,f4e3);
if VcOS < 1
return
end
RApI=sortrows(RApI,-f4e3);
for F6Sl = 1:VcOS
if RApI(F6Sl,2) >= 2
RGEm = RApI(F6Sl,1);
[t0GU AKFe] = find(B == RGEm);
wqei = size(t0GU,1);
m2by = wqei*(wqei-1)/2;
dist = zeros(m2by,3);
[cOA9 S8FA]=find(tril(ones(wqei),-1));
dist(:,1)=S8FA;
dist(:,2)=cOA9;
dist(:,3)=abs(AKFe(cOA9)-AKFe(S8FA))+abs(t0GU(cOA9)-t0GU(S8FA));
[Phrw wN8X] = sort(dist(:,3));
dist = dist(wN8X,:);
wRET = 0;
for Y3bs = 1:m2by
if dist(Y3bs,3) > HJ3S+1
break
end
DZvg = dist(Y3bs,1);
P8h8 = dist(Y3bs,2);
path = a0GE(B,[t0GU(DZvg); t0GU(P8h8)], [AKFe(DZvg); AKFe(P8h8)], -RGEm, HJ3S, 2*RGEm);
if size(path,1) > 0
W = [W; path];
B = geGV(B,path,-RGEm);
wRET = 2;
edit = [1:(DZvg-1) (DZvg+1):(P8h8-1) (P8h8+1):wqei];
t0GU = [t0GU(DZvg); t0GU(P8h8); t0GU(edit)];
AKFe = [AKFe(DZvg); AKFe(P8h8); AKFe(edit)];
break
else
end
end
if wRET < 2
continue
end
for TXcF = 3:wqei
[elJ9 Ycmx] = find(B == -RGEm);
nRjj = size(elJ9,1);
m2by =  nRjj * (wqei - wRET);
dist = zeros(m2by,3);
Y3bs = 0;
for DZvg = 1:nRjj
for P8h8 = (wRET+1):wqei
Y3bs = Y3bs + 1;
dist(Y3bs,1) = DZvg;
dist(Y3bs,2) = P8h8;
dist(Y3bs,3) = abs(elJ9(DZvg)-t0GU(P8h8)) + abs(Ycmx(DZvg)-AKFe(P8h8));
end
end
[Phrw wN8X] = sort(dist(:,3));
dist = dist(wN8X,:);
wDuR = false(wqei,1);
Vye1 = false;
for Y3bs = 1:m2by
if dist(Y3bs,3) > HJ3S+1
break
end
P8h8 = dist(Y3bs,2);
if wDuR(P8h8)
randperm(4);
continue
end
DZvg = dist(Y3bs,1);
path = a0GE(B,[elJ9(DZvg); t0GU(P8h8)], [Ycmx(DZvg); AKFe(P8h8)], -RGEm, HJ3S, RGEm);
wDuR(P8h8)=true;
if size(path,1) > 0
W = [W; path];
B = geGV(B,path,-RGEm);
wRET = wRET + 1;
Vye1 = true;
t0GU([TXcF P8h8]) = t0GU([P8h8 TXcF]);
AKFe([TXcF P8h8]) = AKFe([P8h8 TXcF]);
break
end
end
if ~Vye1
break
end
end
end
end
end
function [W B] = La9y(B,W,oDz9,f4e3)
[RApI VcOS] = Ka0u(B,f4e3);
if VcOS < 1, return, end
RApI=sortrows(RApI,-f4e3);
for F6Sl = 1:VcOS
RGEm = RApI(F6Sl,1);
nRjj = sum(B == -RGEm);
if nRjj == 0
if RApI(F6Sl,2) >= 2
[t0GU AKFe] = find(B == RGEm);
wqei = size(t0GU,1);
m2by = wqei*(wqei-1)*.5;
dist = zeros(m2by,3);
Y3bs = 0;
for DZvg = 1:wqei
for P8h8 = (DZvg+1):wqei
Y3bs = Y3bs + 1;
dist(Y3bs,1) = DZvg;
dist(Y3bs,2) = P8h8;
dist(Y3bs,3) = abs(t0GU(DZvg)-t0GU(P8h8)) + abs(AKFe(DZvg)-AKFe(P8h8));
end
end
[Phrw wN8X] = sort(dist(:,3));
dist = dist(wN8X,:);
maxstep = min(oDz9,2*RGEm+1);
Vye1 = false;
for Y3bs = 1:m2by
if dist(Y3bs,3) > maxstep+1
break
end
DZvg = dist(Y3bs,1);
P8h8 = dist(Y3bs,2);
path = a0GE(B,[t0GU(DZvg); t0GU(P8h8)], [AKFe(DZvg); AKFe(P8h8)], -RGEm, oDz9, 2*RGEm);
if size(path,1) > 0
W = [W; path];
B = geGV(B,path,-RGEm);
Vye1 = true;
break
end
end
if ~Vye1
continue
end
end
end
[t0GU AKFe] = find(B == RGEm);
Ez4B = size(t0GU,1);
maxstep = min(oDz9,RGEm+1);
for TXcF = 1:Ez4B
[elJ9 Ycmx] = find(B == -RGEm);
nRjj = size(elJ9,1);
m2by =  nRjj * (Ez4B-TXcF+1);
dist = zeros(m2by,3);
Y3bs = 0;
for DZvg = 1:nRjj
for P8h8 = TXcF:Ez4B
Y3bs = Y3bs + 1;
dist(Y3bs,1) = DZvg;
dist(Y3bs,2) = P8h8;
dist(Y3bs,3) = abs(elJ9(DZvg)-t0GU(P8h8)) + abs(Ycmx(DZvg)-AKFe(P8h8));
end
end
[Phrw wN8X] = sort(dist(:,3));
dist = dist(wN8X,:);
wDuR = false(Ez4B,1);
Vye1 = false;
for Y3bs = 1:m2by
if dist(Y3bs,3) > maxstep+1
break
end
P8h8 = dist(Y3bs,2);
if wDuR(P8h8)
randperm(4);
continue
end
DZvg = dist(Y3bs,1);
path = a0GE(B,[elJ9(DZvg); t0GU(P8h8)], [Ycmx(DZvg); AKFe(P8h8)], -RGEm, oDz9, 2*RGEm);
wDuR(P8h8)=true;
if size(path,1) > 0
W = [W; path];
B = geGV(B,path,-RGEm);
Vye1 = true;
t0GU([TXcF P8h8]) = t0GU([P8h8 TXcF]);
AKFe([TXcF P8h8]) = AKFe([P8h8 TXcF]);
break
end
end
if ~Vye1
break
end
end
end
end
function [Aqq2 kcHn] = HSPM(ltAy,B,path)
[iuFX kCW4] = size(B);
Aqq2 = ltAy == 0;
kcHn = Aqq2;
Aqq2(:,[1 kCW4]) = false;
kcHn([1 iuFX],:) = false;
for F6Sl = 1:size(path,1)
if path(F6Sl,1) == path(F6Sl,3)
Aqq2(path(F6Sl,1),path(F6Sl,2)) = false;
Aqq2(path(F6Sl,3),path(F6Sl,4)) = false;
end
if path(F6Sl,2) == path(F6Sl,4)
kcHn(path(F6Sl,1),path(F6Sl,2)) = false;
kcHn(path(F6Sl,3),path(F6Sl,4)) = false;
end
end
end
function B = geGV(B,path,dRo1)
B(path(1,1),path(1,2)) = dRo1;
for F6Sl = 1:size(path,1);
B(path(F6Sl,3),path(F6Sl,4)) = dRo1;
end
end
function path = KXkH(GGf6,zY6X,iuFX,YxYT)
path = zeros(YxYT,4);
jri2 = mod(GGf6,iuFX);
PKeZ = ceil(GGf6/iuFX);
for TXcF = 1:YxYT
path(TXcF,1:2) = [jri2 PKeZ];
GGf6 = zY6X(GGf6);
jri2 = mod(GGf6,iuFX);
PKeZ = ceil(GGf6/iuFX);
path(TXcF,3:4) = [jri2 PKeZ];
end
end
function path = a0GE(B,t0GU,AKFe,dRo1,HJ3S,ZaMf)
[iuFX kCW4] = size(B);
zY6X = zeros(iuFX,kCW4);
AUql = -ones(iuFX,kCW4);
AUql(t0GU(2),AKFe(2)) = 0;
AUql(t0GU(1),AKFe(1)) = -2;
AUql( B == dRo1 ) = -2;
DS02 = zeros(iuFX*kCW4,1);
DS02(1) = t0GU(2) + (AKFe(2)-1)*iuFX;
count = 1;
IkRD = [-1 1 -iuFX iuFX];
e0Cy = randperm(4);
for step = 0:min(HJ3S,ZaMf)
if count < 1, break, end
wqei = count;
GGf6 = DS02;
count = 0;
for F6Sl = 1:wqei
XgX8 = GGf6(F6Sl);
for si8T=1:4
dzip = XgX8 + IkRD(e0Cy(si8T));
Zx6u = AUql(dzip);
if Zx6u == -2
zY6X(dzip) = XgX8;
path = KXkH(dzip,zY6X,iuFX,step+1);
return
end
if Zx6u == -1 && B(dzip) == 0
AUql(dzip) = step+1;
zY6X(dzip) = XgX8;
count = count + 1;
DS02(count) = dzip;
end
end
end
end
path = [];
end
function path = jT1S(B,Aqq2,kcHn,t0GU,AKFe,dRo1,ESWO,oDz9,ZaMf)
[iuFX kCW4] = size(B);
zlU6 = false(iuFX,kCW4);
zY6X = zeros(iuFX,kCW4);
AUql = -ones(iuFX,kCW4);
AUql(t0GU(1),AKFe(1)) = -2;
AUql( B == dRo1 ) = -2;
maxstep = min((ESWO*27)+oDz9,ZaMf+1);
We0w = zeros(maxstep+28,1);
We0w(1) = t0GU(2) + (AKFe(2)-1)*iuFX;
IkRD = [-iuFX iuFX -1 1];
for step = 1:maxstep
while We0w(step)>0
XgX8 = We0w(step);
We0w(step)=AUql(XgX8);
for si8T = 1:4
dzip = XgX8 + IkRD(si8T);
Zx6u = AUql(dzip);
if Zx6u==-1
if B(dzip) == 0
AUql(dzip) = We0w(step+1);
We0w(step+1) = dzip;
zY6X(dzip) = XgX8;
elseif (Aqq2(dzip)&&(si8T<3)) || (kcHn(dzip)&&(si8T>2))
AUql(dzip) = We0w(step+26);
We0w(step+26) = dzip;
zY6X(dzip) = XgX8;
zlU6(dzip) = true;
end
end
if Zx6u==-2
step=step+1;
zY6X(dzip) = XgX8;
jri2=mod(dzip,iuFX);
PKeZ=ceil(dzip/iuFX);
path = zeros(step,4);
TXcF = 0;
while jri2 ~= t0GU(2) || PKeZ ~= AKFe(2)
TXcF = TXcF + 1;
path(TXcF,1:2) = [jri2 PKeZ];
dzip = jri2 + (PKeZ-1)*iuFX;
ZRf9 = zY6X(dzip);
auYP=mod(ZRf9,iuFX);
bp1G=ceil(ZRf9/iuFX);
path(TXcF,3:4) = [auYP bp1G];
jri2 = auYP;
PKeZ = bp1G;
if zlU6(jri2,PKeZ)
TXcF = TXcF + 1;
path(TXcF,:) = [jri2 PKeZ jri2 PKeZ];
end
end
path = path(1:TXcF,:);
return
end
end
end
end
path = [];
end
function W = ift6(B)
[W,PeQQ] = d7T1(B);
IpQz = 0;
zDh1 = round(mod(B(:),2));
if PeQQ < 2100
return
end
[SFQX,mSM7] = size(B);
B = flipud(fliplr(B'));
[M33x,zSS6] = d7T1(B);
if PeQQ > zSS6
W = [SFQX-M33x(:,2)+1 mSM7-M33x(:,1)+1 SFQX-M33x(:,4)+1 mSM7-M33x(:,3)+1];
end
if zDh1~=IpQz;        W = zeros(0,4);    end
end
function [W,PeQQ] = d7T1(B)
[OekV,aDof]=size(B);
iZkJ=nan(OekV+2,aDof+2);
iZkJ(2:end-1,2:end-1)=B;
ywsw = iZkJ;
ESWO = 4;
if size(ywsw,2) > 20
PN_p = 4;
XZge = 8;
HJ3S = 12;
else
PN_p = 3;
XZge = 7;
HJ3S = 11;
end
PeQQ = inf;
g7f6 = [1 2;2 1];
VeQt = [1 3;3 1];
pGCh = [3 2 1;1 2 3];
for Y3bs = 1:2
if Y3bs == 2
[LdWo xkqi] = tsZW(ywsw,PN_p,g7f6(Y3bs,:));
[zgFc fK2x] = EE14(xkqi,LdWo,XZge,VeQt(Y3bs,:));
[MHkc XErQ] = EE14(fK2x,zgFc,HJ3S,VeQt(Y3bs,:));
else
[LdWo xkqi] = tsZW(ywsw,4,g7f6(Y3bs,:));
[MHkc XErQ] = EE14(xkqi,LdWo,11,VeQt(Y3bs,:));
end
for TsXt = 1:2
if Y3bs == 2 && TsXt == 2 && PeQQ > 2100, return, end
DVBH = v1TA(ywsw,XErQ,MHkc,ESWO,HJ3S,pGCh(TsXt,:))-1;
pIZv = sQPE(B,DVBH);
if pIZv <= PeQQ
PeQQ = pIZv;
W = DVBH;
ESWO = ESWO - 1;
end
end
end
if OekV*aDof > 290; return; end
ZBUr = sum(W(:,1)==W(:,3)&W(:,2)==W(:,4));
if ZBUr <= 4
r6Hc = ghkB(B);
aBjj = sQPE(B,r6Hc);
if aBjj < PeQQ
W = r6Hc;
PeQQ = aBjj;
end
end
end
function path = zTtU(B,t0GU,AKFe,dRo1,HJ3S,ZaMf)
function path = thIs(ekn9,SwmX,puHc)
Y44t(ekn9,SwmX) = Rict(F6Sl);
QxCW(ekn9,SwmX) = v9xV(F6Sl);
path = zeros(puHc,4);
for JLHc = 1:puHc
path(JLHc,1:2) = [ekn9 SwmX];
oHGX = Y44t(ekn9,SwmX);
yzl2 = QxCW(ekn9,SwmX);
path(JLHc,3:4) = [oHGX yzl2];
ekn9 = oHGX;
SwmX = yzl2;
end
end
[iuFX kCW4] = size(B);
Y44t = zeros(iuFX,kCW4);
QxCW = zeros(iuFX,kCW4);
AUql = -ones(iuFX,kCW4);
AUql(t0GU(2),AKFe(2)) = 0;
AUql(t0GU(1),AKFe(1)) = -2;
AUql( B == dRo1 ) = -2;
UP3N = zeros(iuFX*kCW4,1);
yal5 = zeros(iuFX*kCW4,1);
count = 1;
UP3N(1) = t0GU(2);
yal5(1) = AKFe(2);
HKN5=[-1 1 0 0];
Skj4=[0 0 -1 1];
for step = 0:min(HJ3S,ZaMf)
if count < 1, break, end
wqei = count;
Rict = UP3N(1:wqei);
v9xV = yal5(1:wqei);
count = 0;
for F6Sl = 1:wqei
f34Y = v9xV(F6Sl);
XgX8 = Rict(F6Sl);
for si8T=1:4
ekn9 = XgX8 + HKN5(si8T);
SwmX = f34Y + Skj4(si8T);
dzip = ekn9 + (SwmX-1)*iuFX;
Zx6u = AUql(dzip);
if Zx6u == -2
path = thIs(ekn9,SwmX,step+1);
return
elseif Zx6u == -1 && B(dzip) == 0
AUql(dzip) = step+1;
Y44t(dzip) = XgX8;
QxCW(dzip) = f34Y;
count = count + 1; UP3N(count) = ekn9; yal5(count) = SwmX;
end
end
end
end
path = [];
end
function SHXg = ghkB(P8h8)
RGEm = unique(P8h8);
RGEm(1) = [];
xGtY = zeros(size(RGEm));
for F6Sl = 1:length(xGtY)
xGtY(F6Sl) = nnz(RGEm(F6Sl) == P8h8(:));
end
for F6Sl = 1:length(xGtY)
if xGtY(F6Sl) == 1
P8h8(RGEm(F6Sl) == P8h8(:)) = -1;
end
end
eYLL = zeros(size(P8h8)+2);
isIY = repmat(-1,size(eYLL));
isIY(2:end-1,2:end-1) = P8h8;
SHXg = [];
[AePB, w9J0] = find(isIY>0);
Phrw = (size(isIY,1)/2 - AePB).^2 + (size(isIY,2)/2 - w9J0).^2;
[Phrw, order] = sort(Phrw);
order = order';
for VcOS = 1:length(AePB)-1
L6rV = 0;
SyBh = 32;
for F6Sl = order
if eYLL(AePB(F6Sl), w9J0(F6Sl))
continue
end
[EU_f, SMPN, mMdJ] = J3qo(isIY, eYLL, AePB(F6Sl), w9J0(F6Sl), SyBh);
if EU_f > L6rV
L6rV = EU_f;
QyXM = SMPN;
SyBh = mMdJ;
if SyBh == 1
break
end
end
end
if L6rV == 0
SHXg = SHXg - 1;
return
end
eYLL = geGV(eYLL, QyXM, isIY(QyXM(1,1), QyXM(1,2)));
isIY = geGV(isIY, QyXM, isIY(QyXM(1,1), QyXM(1,2)));
SHXg = [SHXg; QyXM];
end
SHXg = SHXg - 1;
end
function [L6rV, QyXM, SyBh] = J3qo(P8h8, eYLL, GGf6, v9xV, AOFN)
L6rV = 0;
QyXM = [];
JLHc = [1 -1 0 0];
VcOS = [0 0 1 -1];
if ~any(eYLL(:)==P8h8(GGf6,v9xV))
eYLL = P8h8;
end
isIY = P8h8;
isIY(isIY>0) = -1;
isIY(GGf6,v9xV) = 1;
SyBh = Inf;
RGEm = P8h8(GGf6,v9xV);
for F6Sl = 1:AOFN-2
[AePB, w9J0] = find(isIY==F6Sl);
for xGtY = 1:length(AePB)
for zImK = 1:4
rlZr = AePB(xGtY) + JLHc(zImK);
QXHN = w9J0(xGtY) + VcOS(zImK);
if eYLL(rlZr,QXHN) == RGEm && ~(rlZr == GGf6 && QXHN == v9xV)
SyBh = F6Sl;
break
end
Ya07 = isIY(rlZr,QXHN);
if Ya07 == 0
isIY(rlZr,QXHN) = F6Sl+1;
end
end
if SyBh < Inf
break
end
end
if SyBh < Inf
break
end
end
if SyBh == Inf
return
end
L6rV = P8h8(GGf6,v9xV) - SyBh;
if SyBh == 1
QyXM = [GGf6, v9xV, rlZr, QXHN];
return
end
QyXM = zeros(SyBh,4);
for step = SyBh:-1:1
for zImK = 1:4
aDvC = rlZr + JLHc(zImK);
RWjl = QXHN + VcOS(zImK);
if isIY(aDvC, RWjl) == step
break
end
end
QyXM(step,:) = [aDvC, RWjl, rlZr, QXHN];
rlZr = aDvC;
QXHN = RWjl;
end
end
function [W B] = tsZW(B,HJ3S,f4e3)
W = [];
[RApI VcOS] = Ka0u(B,f4e3);
if VcOS < 1
return
end
RApI=sortrows(RApI,-f4e3);
for F6Sl = 1:VcOS
if RApI(F6Sl,2) >= 2
RGEm = RApI(F6Sl,1);
[t0GU AKFe] = find(B == RGEm);
wqei = size(t0GU,1);
m2by = wqei*(wqei-1)/2;
dist = zeros(m2by,3);
Y3bs = 0;
for DZvg = 1:wqei
for P8h8 = (DZvg+1):wqei
Y3bs = Y3bs + 1;
dist(Y3bs,1) = DZvg;
dist(Y3bs,2) = P8h8;
dist(Y3bs,3) = abs(t0GU(DZvg)-t0GU(P8h8)) + abs(AKFe(DZvg)-AKFe(P8h8));
end
end
[Phrw wN8X] = sort(dist(:,3));
dist = dist(wN8X,:);
Kr8H = reshape(dist(:,1:2)',[],1);
wRET = 0;
jT2V = 1;
ZUrV = false(wqei,1);
for F6Sl=1:wqei
yJzJ = find( ~ZUrV(Kr8H(jT2V:end)) , 1 , 'first');
if isempty(yJzJ)
break
end
DZvg = Kr8H(yJzJ);
Distance = abs(t0GU([1:DZvg-1,DZvg+1:end]')-t0GU(DZvg)) + abs(AKFe([1:DZvg-1,DZvg+1:end]')-AKFe(DZvg));
if max(Distance)>HJ3S-1
break
end
path = dV1N(B,t0GU(DZvg),AKFe(DZvg),t0GU([1:DZvg-1,DZvg+1:end]'),AKFe([1:DZvg-1,DZvg+1:end]'), -RGEm, HJ3S, 2*RGEm);
if size(path,1) > 0
W = [W; path];
B = geGV(B,path,-RGEm);
wRET = 2;
break
end
end
if wRET < 2
continue
end
for JLHc = 3:wqei
[elJ9 Ycmx] = find(B == -RGEm);
[t0GU AKFe] = find(B == RGEm);
[YYYH,Dnet] = meshgrid(t0GU,elJ9);
[BlhT,DXTY] = meshgrid(t0GU,elJ9);
Distance = abs(YYYH-Dnet) + abs(BlhT-DXTY);
if max(Distance(:))>HJ3S-1
break
end
path = dV1N(B,elJ9,Ycmx,t0GU,AKFe, -RGEm, HJ3S, 2*RGEm);
if size(path,1) > 0
W = [W; path];
B = geGV(B,path,-RGEm);
Vye1 = true;
else
break
end
end
end
end
end
function [W B] = EE14(B,W,hCa2,f4e3)
[RApI VcOS] = Ka0u(B,f4e3);
if VcOS < 1, return, end
RApI=sortrows(RApI,-f4e3);
for F6Sl = 1:VcOS
RGEm = RApI(F6Sl,1);
nRjj = sum(B == -RGEm);
if nRjj == 0
if RApI(F6Sl,2) >= 2
[t0GU AKFe] = find(B == RGEm);
wqei = size(t0GU,1);
m2by = wqei*(wqei-1)/2;
dist = zeros(m2by,3);
Y3bs = 0;
for DZvg = 1:wqei
for P8h8 = (DZvg+1):wqei
Y3bs = Y3bs + 1;
dist(Y3bs,1) = DZvg;
dist(Y3bs,2) = P8h8;
dist(Y3bs,3) = abs(t0GU(DZvg)-t0GU(P8h8)) + abs(AKFe(DZvg)-AKFe(P8h8));
end
end
[Phrw wN8X] = sort(dist(:,3));
dist = dist(wN8X,:);
maxstep = min(hCa2,2*RGEm+1);
Vye1 = false;
for Y3bs = 1:m2by
if dist(Y3bs,3) > maxstep+1
break
end
DZvg = dist(Y3bs,1);
P8h8 = dist(Y3bs,2);
path = zTtU(B,[t0GU(DZvg); t0GU(P8h8)], [AKFe(DZvg); AKFe(P8h8)], -RGEm, hCa2, 2*RGEm);
if size(path,1) > 0
W = [W; path];
B = geGV(B,path,-RGEm);
Vye1 = true;
break
end
end
if ~Vye1
continue
end
end
end
[t0GU AKFe] = find(B == RGEm);
IWN5 = size(t0GU,1);
maxstep = min(hCa2,RGEm+1);
for JLHc = 1:IWN5
[elJ9 Ycmx] = find(B == -RGEm);
[t0GU AKFe] = find(B == RGEm);
Vye1 = false;
path = dV1N(B,elJ9,Ycmx,t0GU,AKFe, -RGEm, hCa2, RGEm);
if size(path,1) > 0
W = [W; path];
B = geGV(B,path,-RGEm);
Vye1 = true;
end
if ~Vye1
break
end
end
end
end
function [W B] = v1TA(iZkJ,B,W,ESWO,hCa2,f4e3)
function CxL3()
for SHXg = 1:size(path,1);
if path(SHXg,1) == path(SHXg,3)
p6Qq(path(SHXg,1),path(SHXg,2)) = false;
p6Qq(path(SHXg,3),path(SHXg,4)) = false;
if path(SHXg,2) == path(SHXg,4)
B(path(SHXg,1),path(SHXg,2)) = -9999;
end
end
if path(SHXg,2) == path(SHXg,4)
bkE3(path(SHXg,1),path(SHXg,2)) = false;
bkE3(path(SHXg,3),path(SHXg,4)) = false;
end
end
end
[p6Qq bkE3] = HSPM(iZkJ,B,W);
[RApI VcOS] = Ka0u(B,f4e3);
if VcOS < 1, return, end
RApI=sortrows(RApI,-f4e3);
for F6Sl = 1:VcOS
RGEm = RApI(F6Sl,1);
nRjj = sum(B == -RGEm);
if nRjj == 0
if RApI(F6Sl,2) >= 2
[t0GU AKFe] = find(B == RGEm);
wqei = size(t0GU,1);
m2by = wqei*(wqei-1)/2;
dist = zeros(m2by,3);
Y3bs = 0;
for DZvg = 1:wqei
for P8h8 = (DZvg+1):wqei
Y3bs = Y3bs + 1;
dist(Y3bs,1) = DZvg;
dist(Y3bs,2) = P8h8;
dist(Y3bs,3) = abs(t0GU(DZvg)-t0GU(P8h8)) + abs(AKFe(DZvg)-AKFe(P8h8));
end
end
[Phrw wN8X] = sort(dist(:,3));
dist = dist(wN8X,:);
maxstep = min((ESWO*25)+hCa2,2*RGEm+1);
Vye1 = false;
for Y3bs = 1:m2by
if dist(Y3bs,3) > maxstep+1
break
end
DZvg = dist(Y3bs,1);
P8h8 = dist(Y3bs,2);
path = jT1S(B,p6Qq,bkE3,[t0GU(DZvg); t0GU(P8h8)], [AKFe(DZvg); AKFe(P8h8)], -RGEm, ESWO, hCa2, 2*RGEm);
if size(path,1) > 0
W = [W; path];
B = geGV(B,path,-RGEm);
CxL3();
Vye1 = true;
break
end
end
if ~Vye1
continue
end
end
end
[t0GU AKFe] = find(B == RGEm);
IWN5 = size(t0GU,1);
maxstep = min((ESWO*25)+hCa2,RGEm+1);
for JLHc = 1:IWN5
[elJ9 Ycmx] = find(B == -RGEm);
[t0GU AKFe] = find(B == RGEm);
Vye1 = false;
path = lsYA(B,p6Qq,bkE3,elJ9,Ycmx,t0GU,AKFe, -RGEm, ESWO, hCa2, RGEm);
if size(path,1) > 0
W = [W; path];
B = geGV(B,path,-RGEm);
CxL3();
Vye1 = true;
end
if ~Vye1
break
end
end
end
end
function path = lsYA(B,Aqq2,kcHn,rowS,colS,u8nU,qdYT,dRo1,ESWO,oDz9,ZaMf)
function path = KXkH(dzip,step)
zY6X(dzip) = XgX8;
path = zeros(step,4);
TXcF = 0;
PAVE = 0;
BFTQ = zeros(step,1);
NxAs = zeros(step,1);
iqUS = zeros(step,1);
while isempty(find(o73x==dzip,1))
TXcF = TXcF + 1;
BFTQ(TXcF,1) = dzip;
ZRf9 = zY6X(dzip);
NxAs(TXcF,1) = ZRf9;
dzip = ZRf9;
if zlU6(dzip)
PAVE = PAVE + 1;
iqUS(PAVE,1) = dzip;
end
end
BFTQ = [ BFTQ(1:TXcF,:) ; iqUS(1:PAVE,1) ];
NxAs = [ NxAs(1:TXcF,:) ; iqUS(1:PAVE,1) ];
path = [ mod(BFTQ,iuFX) , ceil(BFTQ/iuFX) ,  mod(NxAs,iuFX) , ceil(NxAs/iuFX) ];
end
[iuFX kCW4] = size(B);
zlU6 = false(iuFX,kCW4);
zY6X = zeros(iuFX,kCW4);
AUql = -ones(iuFX,kCW4);
o73x = rowS + (colS-1)*iuFX;
AUql(o73x) = 0;
AUql(u8nU + (qdYT-1)*iuFX) = -2;
maxstep = min((ESWO*25)+oDz9,ZaMf+1);
bQH8 = zeros(maxstep+26,1);
lSao = [-1 1];
for step = 0:maxstep
if step == 0
GGf6 = o73x;
elseif bQH8(step) == 0
continue
else
GGf6 = find(AUql == step);
end
wqei = numel(GGf6);
for F6Sl = 1:wqei
XgX8 = GGf6(F6Sl);
for O47x = 1:2
dzip = XgX8 + lSao(O47x) * iuFX;
Zx6u = AUql(dzip);
if Zx6u == -2
path = KXkH(dzip,step+1);
return
elseif Zx6u == -1
if B(dzip) == 0
AUql(dzip) = step+1; bQH8(step+1) = 1;
zY6X(dzip) = XgX8;
elseif Aqq2(dzip)
AUql(dzip) = step+26; bQH8(step+26) = 1;
zY6X(dzip) = XgX8;
zlU6(dzip) = true;
end
end
end
for O47x = 1:2
dzip = XgX8 + lSao(O47x);
Zx6u = AUql(dzip);
if Zx6u == -2
path = KXkH(dzip,step+1);
return
elseif Zx6u == -1
if B(dzip) == 0
AUql(dzip) = step+1; bQH8(step+1) = 1;
zY6X(dzip) = XgX8;
elseif kcHn(dzip)
AUql(dzip) = step+26; bQH8(step+26) = 1;
zY6X(dzip) = XgX8;
zlU6(dzip) = true;
end
end
end
end
end
path = zeros(0,4);
end
function path = dV1N(B,rowS,colS,iJaL,C0lx,dRo1,HJ3S,ZaMf)
[iuFX kCW4] = size(B);
Y44t = zeros(iuFX,kCW4);
QxCW = zeros(iuFX,kCW4);
AUql = -ones(iuFX,kCW4);
AUql(rowS+(colS-1)*iuFX) = 0;
AUql(iJaL+(C0lx-1)*iuFX) = -2;
DS02 = zeros(iuFX*kCW4,1);
yal5 = zeros(iuFX*kCW4,1);
count = numel(rowS);
DS02(1:count) = rowS;
yal5(1:count) = colS;
HKN5=[-1 1 0 0];
Skj4=[0 0 -1 1];
for step = 0:min(HJ3S,ZaMf)
if count < 1, break, end
wqei = count;
Rict = DS02(1:wqei);
v9xV = yal5(1:wqei);
count = 0;
for F6Sl = 1:wqei
f34Y = v9xV(F6Sl);
XgX8 = Rict(F6Sl);
for si8T=1:4
ekn9 = XgX8 + HKN5(si8T);
SwmX = f34Y + Skj4(si8T);
dzip = ekn9 + (SwmX-1)*iuFX;
Zx6u = AUql(dzip);
if Zx6u == -2
puHc=step+1;
Y44t(ekn9,SwmX) = Rict(F6Sl);
QxCW(ekn9,SwmX) = v9xV(F6Sl);
path = zeros(puHc,4);
for JLHc = 1:puHc
path(JLHc,1:2) = [ekn9 SwmX];
oHGX = Y44t(ekn9,SwmX);
yzl2 = QxCW(ekn9,SwmX);
path(JLHc,3:4) = [oHGX yzl2];
ekn9 = oHGX;
SwmX = yzl2;
end
return
end
if Zx6u == -1 && B(dzip) == 0
AUql(dzip) = step+1;
Y44t(dzip) = XgX8;
QxCW(dzip) = f34Y;
count = count + 1; DS02(count) = ekn9; yal5(count) = SwmX;
end
end
end
end
path = [];
end