ID:49697
Title:Marco Tullio 153
Author:Fabio Carnevale
Date:2008-05-07 11:57:33
Score:13417.7813
Result:133814.00 (cyc: 17, node: 6617)
CPU Time:36.4807
Status:Passed
Comments:
Based on:none
Code:
function W = solv(B)
dMLY=3877;
l6GI = rand(43,1);
W=RW2t(B);
Fx8_ = KAIg(B,W);
[Jczo,PkRx] = size(B);
hi6U = B(Jczo:-1:1,:);
hi6U = hi6U.';
[CvZB,GLyg] = FZup(hi6U,[1 2],[1 2],4*Jczo*PkRx);
if Fx8_ > GLyg
W = [Jczo-CvZB(:,2)+1 CvZB(:,1) Jczo-CvZB(:,4)+1 CvZB(:,3)];
Fx8_=GLyg;
end
a16m=rand('state');
rand(dMLY,1);
if Fx8_>1000 && rand<.5
[CvZB,GLyg] = FZup(hi6U,[1 2],[1 2],4*Jczo*PkRx);
if Fx8_ > GLyg
W = [Jczo-CvZB(:,2)+1 CvZB(:,1) Jczo-CvZB(:,4)+1 CvZB(:,3)];
Fx8_=GLyg;
end
end
if Fx8_>1000 && rand<.5
[CvZB,GLyg] = FZup(hi6U,[1 2],[1 2],4*Jczo*PkRx);
if Fx8_ > GLyg
W = [Jczo-CvZB(:,2)+1 CvZB(:,1) Jczo-CvZB(:,4)+1 CvZB(:,3)];
Fx8_=GLyg;
end
end
rand('state',a16m);
end
function [W,Fx8_] = FZup(CxkM,aNXV,idJ6,Y9FN)
[jxrF,CK3x]=size(CxkM);
a3f_= -ones(jxrF+2,CK3x+2);
a3f_(2:end-1,2:end-1)=CxkM;
wbkl = a3f_;
Ya8F = 4;
if size(wbkl,2) > 20
fJkO = 4;
rtf5 = 8;
ATWm = 18;
else
fJkO = 3;
rtf5 = 7;
ATWm = 13;
end
Fx8_ = inf;
WABR = [1 2;2 1];
pvu3 = [1 3;3 1];
A2oU = [3 2 1;1 2 3];
for PrLj = aNXV
if PrLj == 2
[U1_6 lzpH] = U7_e(wbkl,fJkO,WABR(PrLj,:));
[BceY pPZr] = aYpv(lzpH,U1_6,rtf5,pvu3(PrLj,:));
[mR4E M7eC] = aYpv(pPZr,BceY,ATWm,pvu3(PrLj,:));
else
[U1_6 lzpH] = U7_e(wbkl,4,WABR(PrLj,:));
[mR4E M7eC] = aYpv(lzpH,U1_6,11,pvu3(PrLj,:));
end
for HwSv = idJ6
n3Es = si0k(wbkl,M7eC,mR4E,Ya8F,ATWm,A2oU(HwSv,:))-1;
Pe9I = KAIg(CxkM,n3Es);
if Pe9I <= Fx8_
Fx8_ = Pe9I;
W = n3Es;
Ya8F = Ya8F - 1;
end
end
end
end
function WpVp = KAIg(B,W)
jxrF=size(B,1);
B(W(:,1)+(W(:,2)-1)*jxrF)=0;
B(W(:,3)+(W(:,4)-1)*jxrF)=0;
WpVp=sum(B(:))+size(W,1)+sum(W(:,1)==W(:,3)&W(:,2)==W(:,4))*24;
end
function [mgVc jFUm] = srCC(B,u5tr)
uPDQ = sort(B(B>0),'descend');
VfeB = size(uPDQ,1);
if VfeB < 1
mgVc = [];
jFUm = 0;
return
end
RelO=uPDQ(diff([0;uPDQ])~=0);
mgVc = zeros(nnz(RelO),3);
QTnE=histc(uPDQ,RelO(end:-1:1));
mgVc(:,1)=RelO;
mgVc(:,2)=QTnE(end:-1:1);
jFUm=nnz(RelO);
if u5tr < 3, return, end
for xOHJ = 1:jFUm
if mgVc(xOHJ,2) >= 2
XyoA = mgVc(xOHJ,1);
[ecGD HpQh] = find(B == XyoA);
Usv0 = 0;
gmtQ = size(ecGD,1);
Usv0=sum(abs(diff(ecGD))+abs(diff(HpQh)));
mgVc(xOHJ,3) = mgVc(xOHJ,2)*XyoA - 0.85 * Usv0;
end
end
end
function [W B] = U7_e(B,ATWm,u5tr)
W = [];
[mgVc jFUm] = srCC(B,u5tr);
if jFUm < 1
return
end
mgVc=sortrows(mgVc,-u5tr);
for xOHJ = 1:jFUm
if mgVc(xOHJ,2) >= 2
XyoA = mgVc(xOHJ,1);
[ecGD HpQh] = find(B == XyoA);
gmtQ = size(ecGD,1);
uvvt = gmtQ*(gmtQ-1)/2;
dist = zeros(uvvt,3);
[SG22 JhKe]=find(tril(ones(gmtQ),-1));
dist(:,1)=JhKe;
dist(:,2)=SG22;
dist(:,3)=abs(HpQh(SG22)-HpQh(JhKe))+abs(ecGD(SG22)-ecGD(JhKe));
[Usv0 zDzc] = sort(dist(:,3));
dist = dist(zDzc,:);
VfeB = 0;
for PrLj = 1:uvvt
if dist(PrLj,3) > ATWm+1
break
end
aCau = dist(PrLj,1);
FBrt = dist(PrLj,2);
path = dHg8(B,[ecGD(aCau); ecGD(FBrt)], [HpQh(aCau); HpQh(FBrt)], -XyoA, ATWm, 2*XyoA);
if size(path,1) > 0
W = [W; path];
B = eX3Y(B,path,-XyoA);
VfeB = 2;
edit = [1:(aCau-1) (aCau+1):(FBrt-1) (FBrt+1):gmtQ];
ecGD = [ecGD(aCau); ecGD(FBrt); ecGD(edit)];
HpQh = [HpQh(aCau); HpQh(FBrt); HpQh(edit)];
break
else
end
end
if VfeB < 2
continue
end
for kkTm = 3:gmtQ
[Sd89 HZPi] = find(B == -XyoA);
RPq7 = size(Sd89,1);
uvvt =  RPq7 * (gmtQ - VfeB);
xMFI = (1:RPq7*gmtQ)';
FBrt=mod(xMFI-1,gmtQ)+1;
aCau=ceil(xMFI/gmtQ);
Wqhh = (FBrt>VfeB);
aCau = aCau(Wqhh);
FBrt = FBrt(Wqhh);
Usv0 = abs(Sd89(aCau)-ecGD(FBrt)) + abs(HZPi(aCau)-HpQh(FBrt));
dist = [aCau,FBrt,Usv0];
[Usv0 zDzc] = sort(dist(:,3));
dist = dist(zDzc,:);
PfvQ = false(gmtQ,1);
XMdP = false;
for PrLj = 1:uvvt
if dist(PrLj,3) > ATWm+1
break
end
FBrt = dist(PrLj,2);
if PfvQ(FBrt)
randperm(4);
continue
end
aCau = dist(PrLj,1);
path = dHg8(B,[Sd89(aCau); ecGD(FBrt)], [HZPi(aCau); HpQh(FBrt)], -XyoA, ATWm, XyoA);
PfvQ(FBrt)=true;
if size(path,1) > 0
W = [W; path];
B = eX3Y(B,path,-XyoA);
VfeB = VfeB + 1;
XMdP = true;
ecGD([kkTm FBrt]) = ecGD([FBrt kkTm]);
HpQh([kkTm FBrt]) = HpQh([FBrt kkTm]);
break
end
end
if ~XMdP
break
end
end
end
end
end
function [W B] = aYpv(B,W,qqwx,u5tr)
[mgVc jFUm] = srCC(B,u5tr);
if jFUm < 1, return, end
mgVc=sortrows(mgVc,-u5tr);
for xOHJ = 1:jFUm
XyoA = mgVc(xOHJ,1);
RPq7 = sum(B == -XyoA);
if RPq7 == 0
if mgVc(xOHJ,2) >= 2
[ecGD HpQh] = find(B == XyoA);
gmtQ = size(ecGD,1);
uvvt = gmtQ*(gmtQ-1)*.5;
xMFI = (1:gmtQ*gmtQ)';
FBrt=mod(xMFI-1,gmtQ)+1;
aCau=ceil(xMFI/gmtQ);
Wqhh = (aCau<FBrt);
aCau = aCau(Wqhh);
FBrt = FBrt(Wqhh);
Usv0 = abs(ecGD(aCau)-ecGD(FBrt)) + abs(HpQh(aCau)-HpQh(FBrt));
dist = [aCau,FBrt,Usv0];
[Usv0 zDzc] = sort(dist(:,3));
dist = dist(zDzc,:);
maxstep = min(qqwx,2*XyoA+1);
XMdP = false;
for PrLj = 1:uvvt
if dist(PrLj,3) > maxstep+1
break
end
aCau = dist(PrLj,1);
FBrt = dist(PrLj,2);
path = dHg8(B,[ecGD(aCau); ecGD(FBrt)], [HpQh(aCau); HpQh(FBrt)], -XyoA, qqwx, 2*XyoA);
if size(path,1) > 0
W = [W; path];
B = eX3Y(B,path,-XyoA);
XMdP = true;
break
end
end
if ~XMdP
continue
end
end
end
[ecGD HpQh] = find(B == XyoA);
LKFr = size(ecGD,1);
maxstep = min(qqwx,XyoA+1);
for kkTm = 1:LKFr
[Sd89 HZPi] = find(B == -XyoA);
RPq7 = size(Sd89,1);
uvvt =  RPq7 * (LKFr-kkTm+1);
dist = zeros(uvvt,3);
PrLj = 0;
for aCau = 1:RPq7
for FBrt = kkTm:LKFr
PrLj = PrLj + 1;
dist(PrLj,1) = aCau;
dist(PrLj,2) = FBrt;
dist(PrLj,3) = abs(Sd89(aCau)-ecGD(FBrt)) + abs(HZPi(aCau)-HpQh(FBrt));
end
end
[Usv0 zDzc] = sort(dist(:,3));
dist = dist(zDzc,:);
PfvQ = false(LKFr,1);
XMdP = false;
for PrLj = 1:uvvt
if dist(PrLj,3) > maxstep+1
break
end
FBrt = dist(PrLj,2);
if PfvQ(FBrt)
randperm(4);
continue
end
aCau = dist(PrLj,1);
path = dHg8(B,[Sd89(aCau); ecGD(FBrt)], [HZPi(aCau); HpQh(FBrt)], -XyoA, qqwx, 2*XyoA);
PfvQ(FBrt)=true;
if size(path,1) > 0
W = [W; path];
B = eX3Y(B,path,-XyoA);
XMdP = true;
ecGD([kkTm FBrt]) = ecGD([FBrt kkTm]);
HpQh([kkTm FBrt]) = HpQh([FBrt kkTm]);
break
end
end
if ~XMdP
break
end
end
end
end
function [ZaS2 Y7wF] = l8f0(a3f_,B,path)
[Vjlw Bbve] = size(B);
ZaS2 = a3f_ == 0;
Y7wF = ZaS2;
ZaS2(:,[1 Bbve]) = false;
Y7wF([1 Vjlw],:) = false;
for xOHJ = 1:size(path,1)
if path(xOHJ,1) == path(xOHJ,3)
ZaS2(path(xOHJ,1),path(xOHJ,2)) = false;
ZaS2(path(xOHJ,3),path(xOHJ,4)) = false;
end
if path(xOHJ,2) == path(xOHJ,4)
Y7wF(path(xOHJ,1),path(xOHJ,2)) = false;
Y7wF(path(xOHJ,3),path(xOHJ,4)) = false;
end
end
end
function B = eX3Y(B,path,u4in)
B(path(1,1),path(1,2)) = u4in;
for xOHJ = 1:size(path,1);
B(path(xOHJ,3),path(xOHJ,4)) = u4in;
end
end
function path = i2kt(f3Q0,AcrO,Vjlw,l5Dr)
path = zeros(l5Dr,4);
BREh = mod(f3Q0,Vjlw);
zOop = ceil(f3Q0/Vjlw);
for kkTm = 1:l5Dr
path(kkTm,1:2) = [BREh zOop];
f3Q0 = AcrO(f3Q0);
BREh = mod(f3Q0,Vjlw);
zOop = ceil(f3Q0/Vjlw);
path(kkTm,3:4) = [BREh zOop];
end
end
function path = dHg8(B,ecGD,HpQh,u4in,ATWm,tApj)
[Vjlw Bbve] = size(B);
AcrO = zeros(Vjlw,Bbve);
H4Ha = -ones(Vjlw,Bbve);
H4Ha(ecGD(2),HpQh(2)) = 0;
H4Ha(ecGD(1),HpQh(1)) = -2;
H4Ha( B == u4in ) = -2;
LSKV = zeros(Vjlw*Bbve,1);
LSKV(1) = ecGD(2) + (HpQh(2)-1)*Vjlw;
count = 1;
TI0T = [-1 1 -Vjlw Vjlw];
FghW = randperm(4);
for step = 0:min(ATWm,tApj)
if count < 1, break, end
gmtQ = count;
f3Q0 = LSKV;
count = 0;
for xOHJ = 1:gmtQ
dy1_ = f3Q0(xOHJ);
for XhQd=1:4
XXLE = dy1_ + TI0T(FghW(XhQd));
RHtg = H4Ha(XXLE);
if RHtg == -2
AcrO(XXLE) = dy1_;
path = i2kt(XXLE,AcrO,Vjlw,step+1);
return
end
if RHtg == -1 && B(XXLE) == 0
H4Ha(XXLE) = step+1;
AcrO(XXLE) = dy1_;
count = count + 1;
LSKV(count) = XXLE;
end
end
end
end
path = [];
end
function path = t2Vc(B,ZaS2,Y7wF,ecGD,HpQh,u4in,Ya8F,qqwx,tApj)
[Vjlw Bbve] = size(B);
CMNQ = false(Vjlw,Bbve);
AcrO = zeros(Vjlw,Bbve);
H4Ha = -ones(Vjlw,Bbve);
H4Ha(ecGD(1),HpQh(1)) = -2;
H4Ha( B == u4in ) = -2;
maxstep = min((Ya8F*27)+qqwx,tApj+1);
Pw7m = zeros(maxstep+28,1);
Pw7m(1) = ecGD(2) + (HpQh(2)-1)*Vjlw;
TI0T = [-Vjlw Vjlw -1 1];
for step = 1:maxstep
while Pw7m(step)>0
dy1_ = Pw7m(step);
Pw7m(step)=H4Ha(dy1_);
for XhQd = 1:4
XXLE = dy1_ + TI0T(XhQd);
RHtg = H4Ha(XXLE);
if RHtg==-1
if B(XXLE) == 0
H4Ha(XXLE) = Pw7m(step+1);
Pw7m(step+1) = XXLE;
AcrO(XXLE) = dy1_;
elseif (ZaS2(XXLE)&&(XhQd<3)) || (Y7wF(XXLE)&&(XhQd>2))
H4Ha(XXLE) = Pw7m(step+26);
Pw7m(step+26) = XXLE;
AcrO(XXLE) = dy1_;
CMNQ(XXLE) = true;
end
end
if RHtg==-2
step=step+1;
AcrO(XXLE) = dy1_;
BREh=mod(XXLE,Vjlw);
zOop=ceil(XXLE/Vjlw);
path = zeros(step,4);
kkTm = 0;
while BREh ~= ecGD(2) || zOop ~= HpQh(2)
kkTm = kkTm + 1;
path(kkTm,1:2) = [BREh zOop];
XXLE = BREh + (zOop-1)*Vjlw;
YA3Q = AcrO(XXLE);
W__3=mod(YA3Q,Vjlw);
TQrM=ceil(YA3Q/Vjlw);
path(kkTm,3:4) = [W__3 TQrM];
BREh = W__3;
zOop = TQrM;
if CMNQ(BREh,zOop)
kkTm = kkTm + 1;
path(kkTm,:) = [BREh zOop BREh zOop];
end
end
path = path(1:kkTm,:);
return
end
end
end
end
path = [];
end
function W = RW2t(B)
[W,Fx8_] = lhHh(B);
pYOP = 0;
xAUt = round(mod(B(:),2));
if Fx8_ < 2100
return
end
[QPXZ,v8Il] = size(B);
B = flipud(fliplr(B'));
[giWv,DkAF] = lhHh(B);
if Fx8_ > DkAF
W = [QPXZ-giWv(:,2)+1 v8Il-giWv(:,1)+1 QPXZ-giWv(:,4)+1 v8Il-giWv(:,3)+1];
end
if xAUt~=pYOP;        W = zeros(0,4);    end
end
function [W,Fx8_] = lhHh(B)
[jxrF,CK3x]=size(B);
QPcb=nan(jxrF+2,CK3x+2);
QPcb(2:end-1,2:end-1)=B;
wbkl = QPcb;
Ya8F = 4;
if size(wbkl,2) > 20
fJkO = 4;
rtf5 = 8;
ATWm = 12;
else
fJkO = 3;
rtf5 = 7;
ATWm = 11;
end
Fx8_ = inf;
WABR = [1 2;2 1];
pvu3 = [1 3;3 1];
A2oU = [3 2 1;1 2 3];
for PrLj = 1:2
if PrLj == 2
[U1_6 lzpH] = La8O(wbkl,fJkO,WABR(PrLj,:));
[BceY pPZr] = sdsO(lzpH,U1_6,rtf5,pvu3(PrLj,:));
[mR4E M7eC] = sdsO(pPZr,BceY,ATWm,pvu3(PrLj,:));
else
[U1_6 lzpH] = La8O(wbkl,4,WABR(PrLj,:));
[mR4E M7eC] = sdsO(lzpH,U1_6,11,pvu3(PrLj,:));
end
for HwSv = 1:2
if PrLj == 2 && HwSv == 2 && Fx8_ > 2100, return, end
n3Es = si0k(wbkl,M7eC,mR4E,Ya8F,ATWm,A2oU(HwSv,:))-1;
Pe9I = KAIg(B,n3Es);
if Pe9I <= Fx8_
Fx8_ = Pe9I;
W = n3Es;
Ya8F = Ya8F - 1;
end
end
end
if jxrF*CK3x > 290; return; end
SNxt = sum(W(:,1)==W(:,3)&W(:,2)==W(:,4));
if SNxt <= 4
t338 = pFb8(B);
fmgs = KAIg(B,t338);
if fmgs < Fx8_
W = t338;
Fx8_ = fmgs;
end
end
end
function path = Jc4U(B,ecGD,HpQh,u4in,ATWm,tApj)
function path = N5BB(YQUd,Q8W1,DBuO)
ziNW(YQUd,Q8W1) = ufpD(xOHJ);
gPQr(YQUd,Q8W1) = VHri(xOHJ);
path = zeros(DBuO,4);
for SQMB = 1:DBuO
path(SQMB,1:2) = [YQUd Q8W1];
oZXe = ziNW(YQUd,Q8W1);
ptRw = gPQr(YQUd,Q8W1);
path(SQMB,3:4) = [oZXe ptRw];
YQUd = oZXe;
Q8W1 = ptRw;
end
end
[Vjlw Bbve] = size(B);
ziNW = zeros(Vjlw,Bbve);
gPQr = zeros(Vjlw,Bbve);
H4Ha = -ones(Vjlw,Bbve);
H4Ha(ecGD(2),HpQh(2)) = 0;
H4Ha(ecGD(1),HpQh(1)) = -2;
H4Ha( B == u4in ) = -2;
vVGM = zeros(Vjlw*Bbve,1);
iqVA = zeros(Vjlw*Bbve,1);
count = 1;
vVGM(1) = ecGD(2);
iqVA(1) = HpQh(2);
RXNO=[-1 1 0 0];
rwGc=[0 0 -1 1];
for step = 0:min(ATWm,tApj)
if count < 1, break, end
gmtQ = count;
ufpD = vVGM(1:gmtQ);
VHri = iqVA(1:gmtQ);
count = 0;
for xOHJ = 1:gmtQ
tY_q = VHri(xOHJ);
dy1_ = ufpD(xOHJ);
for XhQd=1:4
YQUd = dy1_ + RXNO(XhQd);
Q8W1 = tY_q + rwGc(XhQd);
XXLE = YQUd + (Q8W1-1)*Vjlw;
RHtg = H4Ha(XXLE);
if RHtg == -2
path = N5BB(YQUd,Q8W1,step+1);
return
elseif RHtg == -1 && B(XXLE) == 0
H4Ha(XXLE) = step+1;
ziNW(XXLE) = dy1_;
gPQr(XXLE) = tY_q;
count = count + 1; vVGM(count) = YQUd; iqVA(count) = Q8W1;
end
end
end
end
path = [];
end
function qX1Z = pFb8(FBrt)
XyoA = unique(FBrt);
XyoA(1) = [];
USaz = zeros(size(XyoA));
for xOHJ = 1:length(USaz)
USaz(xOHJ) = nnz(XyoA(xOHJ) == FBrt(:));
end
for xOHJ = 1:length(USaz)
if USaz(xOHJ) == 1
FBrt(XyoA(xOHJ) == FBrt(:)) = -1;
end
end
DxlF = zeros(size(FBrt)+2);
XDtT = repmat(-1,size(DxlF));
XDtT(2:end-1,2:end-1) = FBrt;
qX1Z = [];
[eZW0, QV6_] = find(XDtT>0);
Usv0 = (size(XDtT,1)/2 - eZW0).^2 + (size(XDtT,2)/2 - QV6_).^2;
[Usv0, order] = sort(Usv0);
order = order';
for jFUm = 1:length(eZW0)-1
jl0w = 0;
WDNu = 32;
for xOHJ = order
if DxlF(eZW0(xOHJ), QV6_(xOHJ))
continue
end
[WpVp, PxAW, PBW9] = iPLu(XDtT, DxlF, eZW0(xOHJ), QV6_(xOHJ), WDNu);
if WpVp > jl0w
jl0w = WpVp;
Rlfy = PxAW;
WDNu = PBW9;
if WDNu == 1
break
end
end
end
if jl0w == 0
qX1Z = qX1Z - 1;
return
end
DxlF = eX3Y(DxlF, Rlfy, XDtT(Rlfy(1,1), Rlfy(1,2)));
XDtT = eX3Y(XDtT, Rlfy, XDtT(Rlfy(1,1), Rlfy(1,2)));
qX1Z = [qX1Z; Rlfy];
end
qX1Z = qX1Z - 1;
end
function [jl0w, Rlfy, WDNu] = iPLu(FBrt, DxlF, f3Q0, VHri, kKiK)
jl0w = 0;
Rlfy = [];
SQMB = [1 -1 0 0];
jFUm = [0 0 1 -1];
if ~any(DxlF(:)==FBrt(f3Q0,VHri))
DxlF = FBrt;
end
XDtT = FBrt;
XDtT(XDtT>0) = -1;
XDtT(f3Q0,VHri) = 1;
WDNu = Inf;
XyoA = FBrt(f3Q0,VHri);
for xOHJ = 1:kKiK-2
[eZW0, QV6_] = find(XDtT==xOHJ);
for USaz = 1:length(eZW0)
for a52_ = 1:4
Z2B5 = eZW0(USaz) + SQMB(a52_);
zWQw = QV6_(USaz) + jFUm(a52_);
if DxlF(Z2B5,zWQw) == XyoA && ~(Z2B5 == f3Q0 && zWQw == VHri)
WDNu = xOHJ;
break
end
I_0Z = XDtT(Z2B5,zWQw);
if I_0Z == 0
XDtT(Z2B5,zWQw) = xOHJ+1;
end
end
if WDNu < Inf
break
end
end
if WDNu < Inf
break
end
end
if WDNu == Inf
return
end
jl0w = FBrt(f3Q0,VHri) - WDNu;
if WDNu == 1
Rlfy = [f3Q0, VHri, Z2B5, zWQw];
return
end
Rlfy = zeros(WDNu,4);
for step = WDNu:-1:1
for a52_ = 1:4
cY0k = Z2B5 + SQMB(a52_);
RJ5L = zWQw + jFUm(a52_);
if XDtT(cY0k, RJ5L) == step
break
end
end
Rlfy(step,:) = [cY0k, RJ5L, Z2B5, zWQw];
Z2B5 = cY0k;
zWQw = RJ5L;
end
end
function [W B] = La8O(B,ATWm,u5tr)
W = [];
[mgVc jFUm] = srCC(B,u5tr);
if jFUm < 1
return
end
mgVc=sortrows(mgVc,-u5tr);
for xOHJ = 1:jFUm
if mgVc(xOHJ,2) >= 2
XyoA = mgVc(xOHJ,1);
[ecGD HpQh] = find(B == XyoA);
gmtQ = size(ecGD,1);
uvvt = gmtQ*(gmtQ-1)/2;
dist = zeros(uvvt,3);
PrLj = 0;
for aCau = 1:gmtQ
for FBrt = (aCau+1):gmtQ
PrLj = PrLj + 1;
dist(PrLj,1) = aCau;
dist(PrLj,2) = FBrt;
dist(PrLj,3) = abs(ecGD(aCau)-ecGD(FBrt)) + abs(HpQh(aCau)-HpQh(FBrt));
end
end
[Usv0 zDzc] = sort(dist(:,3));
dist = dist(zDzc,:);
GX3_ = reshape(dist(:,1:2)',[],1);
VfeB = 0;
aWxX = 1;
c5Sm = false(gmtQ,1);
for xOHJ=1:gmtQ
Iqpn = find( ~c5Sm(GX3_(aWxX:end)) , 1 , 'first');
if isempty(Iqpn)
break
end
aCau = GX3_(Iqpn);
Distance = abs(ecGD([1:aCau-1,aCau+1:end]')-ecGD(aCau)) + abs(HpQh([1:aCau-1,aCau+1:end]')-HpQh(aCau));
if max(Distance)>ATWm-1
break
end
path = ZQeg(B,ecGD(aCau),HpQh(aCau),ecGD([1:aCau-1,aCau+1:end]'),HpQh([1:aCau-1,aCau+1:end]'), -XyoA, ATWm, 2*XyoA);
if size(path,1) > 0
W = [W; path];
B = eX3Y(B,path,-XyoA);
VfeB = 2;
break
end
end
if VfeB < 2
continue
end
for SQMB = 3:gmtQ
[Sd89 HZPi] = find(B == -XyoA);
[ecGD HpQh] = find(B == XyoA);
[vFgz,AnVf] = meshgrid(ecGD,Sd89);
[ugps,bS6n] = meshgrid(ecGD,Sd89);
Distance = abs(vFgz-AnVf) + abs(ugps-bS6n);
if max(Distance(:))>ATWm-1
break
end
path = ZQeg(B,Sd89,HZPi,ecGD,HpQh, -XyoA, ATWm, 2*XyoA);
if size(path,1) > 0
W = [W; path];
B = eX3Y(B,path,-XyoA);
XMdP = true;
else
break
end
end
end
end
end
function [W B] = sdsO(B,W,uI0n,u5tr)
[mgVc jFUm] = srCC(B,u5tr);
if jFUm < 1, return, end
mgVc=sortrows(mgVc,-u5tr);
for xOHJ = 1:jFUm
XyoA = mgVc(xOHJ,1);
RPq7 = sum(B == -XyoA);
if RPq7 == 0
if mgVc(xOHJ,2) >= 2
[ecGD HpQh] = find(B == XyoA);
gmtQ = size(ecGD,1);
uvvt = gmtQ*(gmtQ-1)/2;
dist = zeros(uvvt,3);
PrLj = 0;
for aCau = 1:gmtQ
for FBrt = (aCau+1):gmtQ
PrLj = PrLj + 1;
dist(PrLj,1) = aCau;
dist(PrLj,2) = FBrt;
dist(PrLj,3) = abs(ecGD(aCau)-ecGD(FBrt)) + abs(HpQh(aCau)-HpQh(FBrt));
end
end
[Usv0 zDzc] = sort(dist(:,3));
dist = dist(zDzc,:);
maxstep = min(uI0n,2*XyoA+1);
XMdP = false;
for PrLj = 1:uvvt
if dist(PrLj,3) > maxstep+1
break
end
aCau = dist(PrLj,1);
FBrt = dist(PrLj,2);
path = Jc4U(B,[ecGD(aCau); ecGD(FBrt)], [HpQh(aCau); HpQh(FBrt)], -XyoA, uI0n, 2*XyoA);
if size(path,1) > 0
W = [W; path];
B = eX3Y(B,path,-XyoA);
XMdP = true;
break
end
end
if ~XMdP
continue
end
end
end
[ecGD HpQh] = find(B == XyoA);
g2b_ = size(ecGD,1);
maxstep = min(uI0n,XyoA+1);
for SQMB = 1:g2b_
[Sd89 HZPi] = find(B == -XyoA);
[ecGD HpQh] = find(B == XyoA);
XMdP = false;
path = ZQeg(B,Sd89,HZPi,ecGD,HpQh, -XyoA, uI0n, XyoA);
if size(path,1) > 0
W = [W; path];
B = eX3Y(B,path,-XyoA);
XMdP = true;
end
if ~XMdP
break
end
end
end
end
function [W B] = si0k(QPcb,B,W,Ya8F,uI0n,u5tr)
function FkJD()
for qX1Z = 1:size(path,1);
if path(qX1Z,1) == path(qX1Z,3)
ybHE(path(qX1Z,1),path(qX1Z,2)) = false;
ybHE(path(qX1Z,3),path(qX1Z,4)) = false;
if path(qX1Z,2) == path(qX1Z,4)
B(path(qX1Z,1),path(qX1Z,2)) = -9999;
end
end
if path(qX1Z,2) == path(qX1Z,4)
Ux1V(path(qX1Z,1),path(qX1Z,2)) = false;
Ux1V(path(qX1Z,3),path(qX1Z,4)) = false;
end
end
end
[ybHE Ux1V] = l8f0(QPcb,B,W);
[mgVc jFUm] = srCC(B,u5tr);
if jFUm < 1, return, end
mgVc=sortrows(mgVc,-u5tr);
for xOHJ = 1:jFUm
XyoA = mgVc(xOHJ,1);
RPq7 = sum(B == -XyoA);
if RPq7 == 0
if mgVc(xOHJ,2) >= 2
[ecGD HpQh] = find(B == XyoA);
gmtQ = size(ecGD,1);
uvvt = gmtQ*(gmtQ-1)/2;
dist = zeros(uvvt,3);
PrLj = 0;
for aCau = 1:gmtQ
for FBrt = (aCau+1):gmtQ
PrLj = PrLj + 1;
dist(PrLj,1) = aCau;
dist(PrLj,2) = FBrt;
dist(PrLj,3) = abs(ecGD(aCau)-ecGD(FBrt)) + abs(HpQh(aCau)-HpQh(FBrt));
end
end
[Usv0 zDzc] = sort(dist(:,3));
dist = dist(zDzc,:);
maxstep = min((Ya8F*25)+uI0n,2*XyoA+1);
XMdP = false;
for PrLj = 1:uvvt
if dist(PrLj,3) > maxstep+1
break
end
aCau = dist(PrLj,1);
FBrt = dist(PrLj,2);
path = t2Vc(B,ybHE,Ux1V,[ecGD(aCau); ecGD(FBrt)], [HpQh(aCau); HpQh(FBrt)], -XyoA, Ya8F, uI0n, 2*XyoA);
if size(path,1) > 0
W = [W; path];
B = eX3Y(B,path,-XyoA);
FkJD();
XMdP = true;
break
end
end
if ~XMdP
continue
end
end
end
[ecGD HpQh] = find(B == XyoA);
g2b_ = size(ecGD,1);
maxstep = min((Ya8F*25)+uI0n,XyoA+1);
for SQMB = 1:g2b_
[Sd89 HZPi] = find(B == -XyoA);
[ecGD HpQh] = find(B == XyoA);
XMdP = false;
path = UxOn(B,ybHE,Ux1V,Sd89,HZPi,ecGD,HpQh, -XyoA, Ya8F, uI0n, XyoA);
if size(path,1) > 0
W = [W; path];
B = eX3Y(B,path,-XyoA);
FkJD();
XMdP = true;
end
if ~XMdP
break
end
end
end
end
function path = UxOn(B,ZaS2,Y7wF,rowS,colS,OLZ0,AXZ1,u4in,Ya8F,qqwx,tApj)
function path = i2kt(XXLE,step)
AcrO(XXLE) = dy1_;
path = zeros(step,4);
kkTm = 0;
l0jx = 0;
FuJZ = zeros(step,1);
oVz6 = zeros(step,1);
r6sL = zeros(step,1);
while isempty(find(BKF2==XXLE,1))
kkTm = kkTm + 1;
FuJZ(kkTm,1) = XXLE;
YA3Q = AcrO(XXLE);
oVz6(kkTm,1) = YA3Q;
XXLE = YA3Q;
if CMNQ(XXLE)
l0jx = l0jx + 1;
r6sL(l0jx,1) = XXLE;
end
end
FuJZ = [ FuJZ(1:kkTm,:) ; r6sL(1:l0jx,1) ];
oVz6 = [ oVz6(1:kkTm,:) ; r6sL(1:l0jx,1) ];
path = [ mod(FuJZ,Vjlw) , ceil(FuJZ/Vjlw) ,  mod(oVz6,Vjlw) , ceil(oVz6/Vjlw) ];
end
[Vjlw Bbve] = size(B);
CMNQ = false(Vjlw,Bbve);
AcrO = zeros(Vjlw,Bbve);
H4Ha = -ones(Vjlw,Bbve);
BKF2 = rowS + (colS-1)*Vjlw;
H4Ha(BKF2) = 0;
H4Ha(OLZ0 + (AXZ1-1)*Vjlw) = -2;
maxstep = min((Ya8F*25)+qqwx,tApj+1);
Sut9 = zeros(maxstep+26,1);
prAp = [-1 1];
for step = 0:maxstep
if step == 0
f3Q0 = BKF2;
elseif Sut9(step) == 0
continue
else
f3Q0 = find(H4Ha == step);
end
gmtQ = numel(f3Q0);
for xOHJ = 1:gmtQ
dy1_ = f3Q0(xOHJ);
for ZhhA = 1:2
XXLE = dy1_ + prAp(ZhhA) * Vjlw;
RHtg = H4Ha(XXLE);
if RHtg == -2
path = i2kt(XXLE,step+1);
return
elseif RHtg == -1
if B(XXLE) == 0
H4Ha(XXLE) = step+1; Sut9(step+1) = 1;
AcrO(XXLE) = dy1_;
elseif ZaS2(XXLE)
H4Ha(XXLE) = step+26; Sut9(step+26) = 1;
AcrO(XXLE) = dy1_;
CMNQ(XXLE) = true;
end
end
end
for ZhhA = 1:2
XXLE = dy1_ + prAp(ZhhA);
RHtg = H4Ha(XXLE);
if RHtg == -2
path = i2kt(XXLE,step+1);
return
elseif RHtg == -1
if B(XXLE) == 0
H4Ha(XXLE) = step+1; Sut9(step+1) = 1;
AcrO(XXLE) = dy1_;
elseif Y7wF(XXLE)
H4Ha(XXLE) = step+26; Sut9(step+26) = 1;
AcrO(XXLE) = dy1_;
CMNQ(XXLE) = true;
end
end
end
end
end
path = zeros(0,4);
end
function path = ZQeg(B,rowS,colS,QCnW,Fbwo,u4in,ATWm,tApj)
[Vjlw Bbve] = size(B);
ziNW = zeros(Vjlw,Bbve);
gPQr = zeros(Vjlw,Bbve);
H4Ha = -ones(Vjlw,Bbve);
H4Ha(rowS+(colS-1)*Vjlw) = 0;
H4Ha(QCnW+(Fbwo-1)*Vjlw) = -2;
LSKV = zeros(Vjlw*Bbve,1);
iqVA = zeros(Vjlw*Bbve,1);
count = numel(rowS);
LSKV(1:count) = rowS;
iqVA(1:count) = colS;
RXNO=[-1 1 0 0];
rwGc=[0 0 -1 1];
for step = 0:min(ATWm,tApj)
if count < 1, break, end
gmtQ = count;
ufpD = LSKV(1:gmtQ);
VHri = iqVA(1:gmtQ);
count = 0;
for xOHJ = 1:gmtQ
tY_q = VHri(xOHJ);
dy1_ = ufpD(xOHJ);
for XhQd=1:4
YQUd = dy1_ + RXNO(XhQd);
Q8W1 = tY_q + rwGc(XhQd);
XXLE = YQUd + (Q8W1-1)*Vjlw;
RHtg = H4Ha(XXLE);
if RHtg == -2
DBuO=step+1;
ziNW(YQUd,Q8W1) = ufpD(xOHJ);
gPQr(YQUd,Q8W1) = VHri(xOHJ);
path = zeros(DBuO,4);
for SQMB = 1:DBuO
path(SQMB,1:2) = [YQUd Q8W1];
oZXe = ziNW(YQUd,Q8W1);
ptRw = gPQr(YQUd,Q8W1);
path(SQMB,3:4) = [oZXe ptRw];
YQUd = oZXe;
Q8W1 = ptRw;
end
return
end
if RHtg == -1 && B(XXLE) == 0
H4Ha(XXLE) = step+1;
ziNW(XXLE) = dy1_;
gPQr(XXLE) = tY_q;
count = count + 1; LSKV(count) = YQUd; iqVA(count) = Q8W1;
end
end
end
end
path = [];
end