ID:49763
Title:Marco Tullio 187
Author:Fabio Carnevale
Date:2008-05-07 11:58:59
Score:13432.8536
Result:133994.00 (cyc: 16, node: 6625)
CPU Time:35.1477
Status:Passed
Comments:
Based on:none
Code:
function W = solv(B)
YJmd=261;
od8K = rand(43,1);
W=Vlcd(B);
IAFL = r2Sj(B,W);
[hebd,uqU4] = size(B);
uR3t = B(hebd:-1:1,:);
uR3t = uR3t.';
[P2Vi,wGy7] = qXH0(uR3t,[1 2],[1 2],4*hebd*uqU4);
if IAFL > wGy7
W = [hebd-P2Vi(:,2)+1 P2Vi(:,1) hebd-P2Vi(:,4)+1 P2Vi(:,3)];
IAFL=wGy7;
end
AJ_o=rand('state');
rand(YJmd,1);
if IAFL>1000 && rand<.5
[P2Vi,wGy7] = qXH0(uR3t,[1 2],[1 2],4*hebd*uqU4);
if IAFL > wGy7
W = [hebd-P2Vi(:,2)+1 P2Vi(:,1) hebd-P2Vi(:,4)+1 P2Vi(:,3)];
IAFL=wGy7;
end
end
if IAFL>1000 && rand<.5
[P2Vi,wGy7] = qXH0(uR3t,[1 2],[1 2],4*hebd*uqU4);
if IAFL > wGy7
W = [hebd-P2Vi(:,2)+1 P2Vi(:,1) hebd-P2Vi(:,4)+1 P2Vi(:,3)];
IAFL=wGy7;
end
end
rand('state',AJ_o);
end
function [W,IAFL] = qXH0(t5aT,t4HT,afnA,I19Z)
[h_yD,DXG1]=size(t5aT);
h0cv= -ones(h_yD+2,DXG1+2);
h0cv(2:end-1,2:end-1)=t5aT;
dFwL = h0cv;
CHo9 = 4;
if size(dFwL,2) > 20
Lvih = 4;
GhOJ = 8;
p8Xc = 18;
else
Lvih = 3;
GhOJ = 7;
p8Xc = 13;
end
IAFL = inf;
U_IB = [1 2;2 1];
bq_l = [1 3;3 1];
qyL0 = [3 2 1;1 2 3];
for SNU7 = t4HT
if SNU7 == 2
[RRqd kOmM] = aHtS(dFwL,Lvih,U_IB(SNU7,:));
[YZ9f kCRf] = QMB3(kOmM,RRqd,GhOJ,bq_l(SNU7,:));
[dnSz MmBp] = QMB3(kCRf,YZ9f,p8Xc,bq_l(SNU7,:));
else
[RRqd kOmM] = aHtS(dFwL,4,U_IB(SNU7,:));
[dnSz MmBp] = QMB3(kOmM,RRqd,11,bq_l(SNU7,:));
end
for TMwV = afnA
UG5r = uXwe(dFwL,MmBp,dnSz,CHo9,p8Xc,qyL0(TMwV,:))-1;
K9OR = r2Sj(t5aT,UG5r);
if K9OR <= IAFL
IAFL = K9OR;
W = UG5r;
CHo9 = CHo9 - 1;
end
end
end
end
function jQ_m = r2Sj(B,W)
h_yD=size(B,1);
B(W(:,1)+(W(:,2)-1)*h_yD)=0;
B(W(:,3)+(W(:,4)-1)*h_yD)=0;
jQ_m=sum(B(:))+size(W,1)+sum(W(:,1)==W(:,3)&W(:,2)==W(:,4))*24;
end
function [NRBI f2kZ] = PDwY(B,m1qh)
Lg9n = sort(B(B>0),'descend');
B_bx = size(Lg9n,1);
if B_bx < 1
NRBI = [];
f2kZ = 0;
return
end
mdV1=Lg9n(diff([0;Lg9n])~=0);
NRBI = zeros(nnz(mdV1),3);
RrVt=histc(Lg9n,mdV1(end:-1:1));
NRBI(:,1)=mdV1;
NRBI(:,2)=RrVt(end:-1:1);
f2kZ=nnz(mdV1);
if m1qh < 3, return, end
for Naeu = 1:f2kZ
if NRBI(Naeu,2) >= 2
ET7Q = NRBI(Naeu,1);
[tdpI obXn] = find(B == ET7Q);
LgOf = 0;
yLXP = size(tdpI,1);
LgOf=sum(abs(diff(tdpI))+abs(diff(obXn)));
NRBI(Naeu,3) = NRBI(Naeu,2)*ET7Q - 0.85 * LgOf;
end
end
end
function [W B] = aHtS(B,p8Xc,m1qh)
W = [];
[NRBI f2kZ] = PDwY(B,m1qh);
if f2kZ < 1
return
end
NRBI=sortrows(NRBI,-m1qh);
for Naeu = 1:f2kZ
if NRBI(Naeu,2) >= 2
ET7Q = NRBI(Naeu,1);
[tdpI obXn] = find(B == ET7Q);
yLXP = size(tdpI,1);
eS_w = yLXP*(yLXP-1)/2;
dist = zeros(eS_w,3);
[WHt7 ILQM]=find(tril(ones(yLXP),-1));
dist(:,1)=ILQM;
dist(:,2)=WHt7;
dist(:,3)=abs(obXn(WHt7)-obXn(ILQM))+abs(tdpI(WHt7)-tdpI(ILQM));
[LgOf RQMk] = sort(dist(:,3));
dist = dist(RQMk,:);
B_bx = 0;
for SNU7 = 1:eS_w
if dist(SNU7,3) > p8Xc+1
break
end
B3cr = dist(SNU7,1);
Zi5w = dist(SNU7,2);
path = xMxg(B,[tdpI(B3cr); tdpI(Zi5w)], [obXn(B3cr); obXn(Zi5w)], -ET7Q, p8Xc, 2*ET7Q);
if size(path,1) > 0
W = [W; path];
B = Qr5n(B,path,-ET7Q);
B_bx = 2;
edit = [1:(B3cr-1) (B3cr+1):(Zi5w-1) (Zi5w+1):yLXP];
tdpI = [tdpI(B3cr); tdpI(Zi5w); tdpI(edit)];
obXn = [obXn(B3cr); obXn(Zi5w); obXn(edit)];
break
else
end
end
if B_bx < 2
continue
end
for f_kg = 3:yLXP
[Z_Xc w8iv] = find(B == -ET7Q);
aRIF = size(Z_Xc,1);
eS_w =  aRIF * (yLXP - B_bx);
USJW = (1:aRIF*yLXP)';
Zi5w=mod(USJW-1,yLXP)+1;
B3cr=ceil(USJW/yLXP);
Epos = (Zi5w>B_bx);
B3cr = B3cr(Epos);
Zi5w = Zi5w(Epos);
LgOf = abs(Z_Xc(B3cr)-tdpI(Zi5w)) + abs(w8iv(B3cr)-obXn(Zi5w));
dist = [B3cr,Zi5w,LgOf];
[LgOf RQMk] = sort(dist(:,3));
dist = dist(RQMk,:);
qX1I = false(yLXP,1);
I1cJ = false;
for SNU7 = 1:eS_w
if dist(SNU7,3) > p8Xc+1
break
end
Zi5w = dist(SNU7,2);
if qX1I(Zi5w)
randperm(4);
continue
end
B3cr = dist(SNU7,1);
path = xMxg(B,[Z_Xc(B3cr); tdpI(Zi5w)], [w8iv(B3cr); obXn(Zi5w)], -ET7Q, p8Xc, ET7Q);
qX1I(Zi5w)=true;
if size(path,1) > 0
W = [W; path];
B = Qr5n(B,path,-ET7Q);
B_bx = B_bx + 1;
I1cJ = true;
tdpI([f_kg Zi5w]) = tdpI([Zi5w f_kg]);
obXn([f_kg Zi5w]) = obXn([Zi5w f_kg]);
break
end
end
if ~I1cJ
break
end
end
end
end
end
function [W B] = QMB3(B,W,cp3C,m1qh)
[NRBI f2kZ] = PDwY(B,m1qh);
if f2kZ < 1, return, end
NRBI=sortrows(NRBI,-m1qh);
for Naeu = 1:f2kZ
ET7Q = NRBI(Naeu,1);
aRIF = sum(B == -ET7Q);
if aRIF == 0
if NRBI(Naeu,2) >= 2
[tdpI obXn] = find(B == ET7Q);
yLXP = size(tdpI,1);
eS_w = yLXP*(yLXP-1)*.5;
USJW = (1:yLXP*yLXP)';
Zi5w=mod(USJW-1,yLXP)+1;
B3cr=ceil(USJW/yLXP);
Epos = (B3cr<Zi5w);
B3cr = B3cr(Epos);
Zi5w = Zi5w(Epos);
LgOf = abs(tdpI(B3cr)-tdpI(Zi5w)) + abs(obXn(B3cr)-obXn(Zi5w));
dist = [B3cr,Zi5w,LgOf];
[LgOf RQMk] = sort(dist(:,3));
dist = dist(RQMk,:);
maxstep = min(cp3C,2*ET7Q+1);
I1cJ = false;
for SNU7 = 1:eS_w
if dist(SNU7,3) > maxstep+1
break
end
B3cr = dist(SNU7,1);
Zi5w = dist(SNU7,2);
path = xMxg(B,[tdpI(B3cr); tdpI(Zi5w)], [obXn(B3cr); obXn(Zi5w)], -ET7Q, cp3C, 2*ET7Q);
if size(path,1) > 0
W = [W; path];
B = Qr5n(B,path,-ET7Q);
I1cJ = true;
break
end
end
if ~I1cJ
continue
end
end
end
[tdpI obXn] = find(B == ET7Q);
X8vM = size(tdpI,1);
maxstep = min(cp3C,ET7Q+1);
for f_kg = 1:X8vM
[Z_Xc w8iv] = find(B == -ET7Q);
aRIF = size(Z_Xc,1);
eS_w =  aRIF * (X8vM-f_kg+1);
USJW = (1:aRIF*X8vM)';
Zi5w=mod(USJW-1,X8vM)+1;
B3cr=ceil(USJW/X8vM);
Epos = (Zi5w>=f_kg);
B3cr = B3cr(Epos);
Zi5w = Zi5w(Epos);
LgOf = abs(Z_Xc(B3cr)-tdpI(Zi5w)) + abs(w8iv(B3cr)-obXn(Zi5w));
dist = [B3cr,Zi5w,LgOf];
[LgOf RQMk] = sort(dist(:,3));
dist = dist(RQMk,:);
qX1I = false(X8vM,1);
I1cJ = false;
for SNU7 = 1:eS_w
if dist(SNU7,3) > maxstep+1
break
end
Zi5w = dist(SNU7,2);
if qX1I(Zi5w)
randperm(4);
continue
end
B3cr = dist(SNU7,1);
path = xMxg(B,[Z_Xc(B3cr); tdpI(Zi5w)], [w8iv(B3cr); obXn(Zi5w)], -ET7Q, cp3C, 2*ET7Q);
qX1I(Zi5w)=true;
if size(path,1) > 0
W = [W; path];
B = Qr5n(B,path,-ET7Q);
I1cJ = true;
tdpI([f_kg Zi5w]) = tdpI([Zi5w f_kg]);
obXn([f_kg Zi5w]) = obXn([Zi5w f_kg]);
break
end
end
if ~I1cJ
break
end
end
end
end
function [UGqt lirh] = ce2R(h0cv,B,path)
[Fd3b LeaN] = size(B);
UGqt = h0cv == 0;
lirh = UGqt;
UGqt(:,[1 LeaN]) = false;
lirh([1 Fd3b],:) = false;
for Naeu = 1:size(path,1)
if path(Naeu,1) == path(Naeu,3)
UGqt(path(Naeu,1),path(Naeu,2)) = false;
UGqt(path(Naeu,3),path(Naeu,4)) = false;
end
if path(Naeu,2) == path(Naeu,4)
lirh(path(Naeu,1),path(Naeu,2)) = false;
lirh(path(Naeu,3),path(Naeu,4)) = false;
end
end
end
function B = Qr5n(B,path,pmPS)
B(path(1,1),path(1,2)) = pmPS;
for Naeu = 1:size(path,1);
B(path(Naeu,3),path(Naeu,4)) = pmPS;
end
end
function path = YwNf(uVKw,yJJG,Fd3b,mp3Z)
path = zeros(mp3Z,4);
eoU8 = mod(uVKw,Fd3b);
MILc = ceil(uVKw/Fd3b);
for f_kg = 1:mp3Z
path(f_kg,1:2) = [eoU8 MILc];
uVKw = yJJG(uVKw);
eoU8 = mod(uVKw,Fd3b);
MILc = ceil(uVKw/Fd3b);
path(f_kg,3:4) = [eoU8 MILc];
end
end
function path = xMxg(B,tdpI,obXn,pmPS,p8Xc,THgh)
[Fd3b LeaN] = size(B);
yJJG = zeros(Fd3b,LeaN);
z6WH = -ones(Fd3b,LeaN);
z6WH(tdpI(2),obXn(2)) = 0;
z6WH(tdpI(1),obXn(1)) = -2;
z6WH( B == pmPS ) = -2;
l2Hd = zeros(Fd3b*LeaN,1);
l2Hd(1) = tdpI(2) + (obXn(2)-1)*Fd3b;
count = 1;
VW1D = [-1 1 -Fd3b Fd3b];
csDp = randperm(4);
for step = 0:min(p8Xc,THgh)
if count < 1, break, end
yLXP = count;
uVKw = l2Hd;
count = 0;
for Naeu = 1:yLXP
wGfT = uVKw(Naeu);
for gSjj=1:4
A8mr = wGfT + VW1D(csDp(gSjj));
iYoI = z6WH(A8mr);
if iYoI == -2
yJJG(A8mr) = wGfT;
path = YwNf(A8mr,yJJG,Fd3b,step+1);
return
end
if iYoI == -1 && B(A8mr) == 0
z6WH(A8mr) = step+1;
yJJG(A8mr) = wGfT;
count = count + 1;
l2Hd(count) = A8mr;
end
end
end
end
path = [];
end
function path = alrK(B,UGqt,lirh,tdpI,obXn,pmPS,CHo9,cp3C,THgh)
[Fd3b LeaN] = size(B);
EYWc = false(Fd3b,LeaN);
yJJG = zeros(Fd3b,LeaN);
z6WH = -ones(Fd3b,LeaN);
z6WH(tdpI(1),obXn(1)) = -2;
z6WH( B == pmPS ) = -2;
maxstep = min((CHo9*27)+cp3C,THgh+1);
xi43 = zeros(maxstep+28,1);
xi43(1) = tdpI(2) + (obXn(2)-1)*Fd3b;
VW1D = [-Fd3b Fd3b -1 1];
for step = 1:maxstep
while xi43(step)>0
wGfT = xi43(step);
xi43(step)=z6WH(wGfT);
for gSjj = 1:4
A8mr = wGfT + VW1D(gSjj);
iYoI = z6WH(A8mr);
if iYoI==-1
if B(A8mr) == 0
z6WH(A8mr) = xi43(step+1);
xi43(step+1) = A8mr;
yJJG(A8mr) = wGfT;
elseif (UGqt(A8mr)&&(gSjj<3)) || (lirh(A8mr)&&(gSjj>2))
z6WH(A8mr) = xi43(step+26);
xi43(step+26) = A8mr;
yJJG(A8mr) = wGfT;
EYWc(A8mr) = true;
end
end
if iYoI==-2
step=step+1;
yJJG(A8mr) = wGfT;
eoU8=mod(A8mr,Fd3b);
MILc=ceil(A8mr/Fd3b);
path = zeros(step,4);
f_kg = 0;
while eoU8 ~= tdpI(2) || MILc ~= obXn(2)
f_kg = f_kg + 1;
path(f_kg,1:2) = [eoU8 MILc];
A8mr = eoU8 + (MILc-1)*Fd3b;
pgXP = yJJG(A8mr);
ON_M=mod(pgXP,Fd3b);
ozCg=ceil(pgXP/Fd3b);
path(f_kg,3:4) = [ON_M ozCg];
eoU8 = ON_M;
MILc = ozCg;
if EYWc(eoU8,MILc)
f_kg = f_kg + 1;
path(f_kg,:) = [eoU8 MILc eoU8 MILc];
end
end
path = path(1:f_kg,:);
return
end
end
end
end
path = [];
end
function W = Vlcd(B)
[W,IAFL] = vc25(B);
Zf8a = 0;
b9XB = round(mod(B(:),2));
if IAFL < 2100
return
end
[zn5Z,yZ3T] = size(B);
B = flipud(fliplr(B'));
[cWEw,jpqK] = vc25(B);
if IAFL > jpqK
W = [zn5Z-cWEw(:,2)+1 yZ3T-cWEw(:,1)+1 zn5Z-cWEw(:,4)+1 yZ3T-cWEw(:,3)+1];
end
if b9XB~=Zf8a;        W = zeros(0,4);    end
end
function [W,IAFL] = vc25(B)
[h_yD,DXG1]=size(B);
hBgc=nan(h_yD+2,DXG1+2);
hBgc(2:end-1,2:end-1)=B;
dFwL = hBgc;
CHo9 = 4;
if size(dFwL,2) > 20
Lvih = 4;
GhOJ = 8;
p8Xc = 12;
else
Lvih = 3;
GhOJ = 7;
p8Xc = 11;
end
IAFL = inf;
U_IB = [1 2;2 1];
bq_l = [1 3;3 1];
qyL0 = [3 2 1;1 2 3];
for SNU7 = 1:2
if SNU7 == 2
[RRqd kOmM] = AuFW(dFwL,Lvih,U_IB(SNU7,:));
[YZ9f kCRf] = PMaQ(kOmM,RRqd,GhOJ,bq_l(SNU7,:));
[dnSz MmBp] = PMaQ(kCRf,YZ9f,p8Xc,bq_l(SNU7,:));
else
[RRqd kOmM] = AuFW(dFwL,4,U_IB(SNU7,:));
[dnSz MmBp] = PMaQ(kOmM,RRqd,11,bq_l(SNU7,:));
end
for TMwV = 1:2
if SNU7 == 2 && TMwV == 2 && IAFL > 2100, return, end
UG5r = uXwe(dFwL,MmBp,dnSz,CHo9,p8Xc,qyL0(TMwV,:))-1;
K9OR = r2Sj(B,UG5r);
if K9OR <= IAFL
IAFL = K9OR;
W = UG5r;
CHo9 = CHo9 - 1;
end
end
end
if h_yD*DXG1 > 290; return; end
fqH8 = sum(W(:,1)==W(:,3)&W(:,2)==W(:,4));
if fqH8 <= 4
LfTF = k5Y3(B);
tbtB = r2Sj(B,LfTF);
if tbtB < IAFL
W = LfTF;
IAFL = tbtB;
end
end
end
function path = H8Al(B,tdpI,obXn,pmPS,p8Xc,THgh)
function path = l6JL(hAYI,Abas,XEIH)
LLYz(hAYI,Abas) = GbkR(Naeu);
za_x(hAYI,Abas) = VNkd(Naeu);
path = zeros(XEIH,4);
for Osul = 1:XEIH
path(Osul,1:2) = [hAYI Abas];
EnGy = LLYz(hAYI,Abas);
dcFT = za_x(hAYI,Abas);
path(Osul,3:4) = [EnGy dcFT];
hAYI = EnGy;
Abas = dcFT;
end
end
[Fd3b LeaN] = size(B);
LLYz = zeros(Fd3b,LeaN);
za_x = zeros(Fd3b,LeaN);
z6WH = -ones(Fd3b,LeaN);
z6WH(tdpI(2),obXn(2)) = 0;
z6WH(tdpI(1),obXn(1)) = -2;
z6WH( B == pmPS ) = -2;
Llv1 = zeros(Fd3b*LeaN,1);
BXll = zeros(Fd3b*LeaN,1);
count = 1;
Llv1(1) = tdpI(2);
BXll(1) = obXn(2);
h1Wj=[-1 1 0 0];
hAcH=[0 0 -1 1];
for step = 0:min(p8Xc,THgh)
if count < 1, break, end
yLXP = count;
GbkR = Llv1(1:yLXP);
VNkd = BXll(1:yLXP);
count = 0;
for Naeu = 1:yLXP
LA_B = VNkd(Naeu);
wGfT = GbkR(Naeu);
for gSjj=1:4
hAYI = wGfT + h1Wj(gSjj);
Abas = LA_B + hAcH(gSjj);
A8mr = hAYI + (Abas-1)*Fd3b;
iYoI = z6WH(A8mr);
if iYoI == -2
path = l6JL(hAYI,Abas,step+1);
return
elseif iYoI == -1 && B(A8mr) == 0
z6WH(A8mr) = step+1;
LLYz(A8mr) = wGfT;
za_x(A8mr) = LA_B;
count = count + 1; Llv1(count) = hAYI; BXll(count) = Abas;
end
end
end
end
path = [];
end
function nSWO = k5Y3(Zi5w)
ET7Q = unique(Zi5w);
ET7Q(1) = [];
lQOM = zeros(size(ET7Q));
for Naeu = 1:length(lQOM)
lQOM(Naeu) = nnz(ET7Q(Naeu) == Zi5w(:));
end
for Naeu = 1:length(lQOM)
if lQOM(Naeu) == 1
Zi5w(ET7Q(Naeu) == Zi5w(:)) = -1;
end
end
v03f = zeros(size(Zi5w)+2);
d9Ju = repmat(-1,size(v03f));
d9Ju(2:end-1,2:end-1) = Zi5w;
nSWO = [];
[SYd9, oXUf] = find(d9Ju>0);
LgOf = (size(d9Ju,1)/2 - SYd9).^2 + (size(d9Ju,2)/2 - oXUf).^2;
[LgOf, order] = sort(LgOf);
order = order';
for f2kZ = 1:length(SYd9)-1
DOO2 = 0;
vquX = 32;
for Naeu = order
if v03f(SYd9(Naeu), oXUf(Naeu))
continue
end
[jQ_m, RxYJ, EL2U] = XH7h(d9Ju, v03f, SYd9(Naeu), oXUf(Naeu), vquX);
if jQ_m > DOO2
DOO2 = jQ_m;
fZxu = RxYJ;
vquX = EL2U;
if vquX == 1
break
end
end
end
if DOO2 == 0
nSWO = nSWO - 1;
return
end
v03f = Qr5n(v03f, fZxu, d9Ju(fZxu(1,1), fZxu(1,2)));
d9Ju = Qr5n(d9Ju, fZxu, d9Ju(fZxu(1,1), fZxu(1,2)));
nSWO = [nSWO; fZxu];
end
nSWO = nSWO - 1;
end
function [DOO2, fZxu, vquX] = XH7h(Zi5w, v03f, uVKw, VNkd, eGNd)
DOO2 = 0;
fZxu = [];
Osul = [1 -1 0 0];
f2kZ = [0 0 1 -1];
if ~any(v03f(:)==Zi5w(uVKw,VNkd))
v03f = Zi5w;
end
d9Ju = Zi5w;
d9Ju(d9Ju>0) = -1;
d9Ju(uVKw,VNkd) = 1;
vquX = Inf;
ET7Q = Zi5w(uVKw,VNkd);
for Naeu = 1:eGNd-2
[SYd9, oXUf] = find(d9Ju==Naeu);
for lQOM = 1:length(SYd9)
for b2cY = 1:4
EsXd = SYd9(lQOM) + Osul(b2cY);
EJhp = oXUf(lQOM) + f2kZ(b2cY);
if v03f(EsXd,EJhp) == ET7Q && ~(EsXd == uVKw && EJhp == VNkd)
vquX = Naeu;
break
end
GcNz = d9Ju(EsXd,EJhp);
if GcNz == 0
d9Ju(EsXd,EJhp) = Naeu+1;
end
end
if vquX < Inf
break
end
end
if vquX < Inf
break
end
end
if vquX == Inf
return
end
DOO2 = Zi5w(uVKw,VNkd) - vquX;
if vquX == 1
fZxu = [uVKw, VNkd, EsXd, EJhp];
return
end
fZxu = zeros(vquX,4);
for step = vquX:-1:1
for b2cY = 1:4
QIEO = EsXd + Osul(b2cY);
t6uz = EJhp + f2kZ(b2cY);
if d9Ju(QIEO, t6uz) == step
break
end
end
fZxu(step,:) = [QIEO, t6uz, EsXd, EJhp];
EsXd = QIEO;
EJhp = t6uz;
end
end
function [W B] = AuFW(B,p8Xc,m1qh)
W = [];
[NRBI f2kZ] = PDwY(B,m1qh);
if f2kZ < 1
return
end
NRBI=sortrows(NRBI,-m1qh);
for Naeu = 1:f2kZ
if NRBI(Naeu,2) >= 2
ET7Q = NRBI(Naeu,1);
[tdpI obXn] = find(B == ET7Q);
yLXP = size(tdpI,1);
eS_w = yLXP*(yLXP-1)/2;
dist = zeros(eS_w,3);
SNU7 = 0;
for B3cr = 1:yLXP
for Zi5w = (B3cr+1):yLXP
SNU7 = SNU7 + 1;
dist(SNU7,1) = B3cr;
dist(SNU7,2) = Zi5w;
dist(SNU7,3) = abs(tdpI(B3cr)-tdpI(Zi5w)) + abs(obXn(B3cr)-obXn(Zi5w));
end
end
[LgOf RQMk] = sort(dist(:,3));
dist = dist(RQMk,:);
mMJX = reshape(dist(:,1:2)',[],1);
B_bx = 0;
nZYN = 1;
aOBV = false(yLXP,1);
for Naeu=1:yLXP
RCF1 = find( ~aOBV(mMJX(nZYN:end)) , 1 , 'first');
if isempty(RCF1)
break
end
B3cr = mMJX(RCF1);
Distance = abs(tdpI([1:B3cr-1,B3cr+1:end]')-tdpI(B3cr)) + abs(obXn([1:B3cr-1,B3cr+1:end]')-obXn(B3cr));
if max(Distance)>p8Xc-1
break
end
path = NdoG(B,tdpI(B3cr),obXn(B3cr),tdpI([1:B3cr-1,B3cr+1:end]'),obXn([1:B3cr-1,B3cr+1:end]'), -ET7Q, p8Xc, 2*ET7Q);
if size(path,1) > 0
W = [W; path];
B = Qr5n(B,path,-ET7Q);
B_bx = 2;
break
end
end
if B_bx < 2
continue
end
for Osul = 3:yLXP
[Z_Xc w8iv] = find(B == -ET7Q);
[tdpI obXn] = find(B == ET7Q);
[oWD4,H_4Z] = meshgrid(tdpI,Z_Xc);
[E49U,ksi2] = meshgrid(tdpI,Z_Xc);
Distance = abs(oWD4-H_4Z) + abs(E49U-ksi2);
if max(Distance(:))>p8Xc-1
break
end
path = NdoG(B,Z_Xc,w8iv,tdpI,obXn, -ET7Q, p8Xc, 2*ET7Q);
if size(path,1) > 0
W = [W; path];
B = Qr5n(B,path,-ET7Q);
I1cJ = true;
else
break
end
end
end
end
end
function [W B] = PMaQ(B,W,hSQF,m1qh)
[NRBI f2kZ] = PDwY(B,m1qh);
if f2kZ < 1, return, end
NRBI=sortrows(NRBI,-m1qh);
for Naeu = 1:f2kZ
ET7Q = NRBI(Naeu,1);
aRIF = sum(B == -ET7Q);
if aRIF == 0
if NRBI(Naeu,2) >= 2
[tdpI obXn] = find(B == ET7Q);
yLXP = size(tdpI,1);
eS_w = yLXP*(yLXP-1)/2;
dist = zeros(eS_w,3);
SNU7 = 0;
for B3cr = 1:yLXP
for Zi5w = (B3cr+1):yLXP
SNU7 = SNU7 + 1;
dist(SNU7,1) = B3cr;
dist(SNU7,2) = Zi5w;
dist(SNU7,3) = abs(tdpI(B3cr)-tdpI(Zi5w)) + abs(obXn(B3cr)-obXn(Zi5w));
end
end
[LgOf RQMk] = sort(dist(:,3));
dist = dist(RQMk,:);
maxstep = min(hSQF,2*ET7Q+1);
I1cJ = false;
for SNU7 = 1:eS_w
if dist(SNU7,3) > maxstep+1
break
end
B3cr = dist(SNU7,1);
Zi5w = dist(SNU7,2);
path = H8Al(B,[tdpI(B3cr); tdpI(Zi5w)], [obXn(B3cr); obXn(Zi5w)], -ET7Q, hSQF, 2*ET7Q);
if size(path,1) > 0
W = [W; path];
B = Qr5n(B,path,-ET7Q);
I1cJ = true;
break
end
end
if ~I1cJ
continue
end
end
end
[tdpI obXn] = find(B == ET7Q);
Z_dL = size(tdpI,1);
maxstep = min(hSQF,ET7Q+1);
for Osul = 1:Z_dL
[Z_Xc w8iv] = find(B == -ET7Q);
[tdpI obXn] = find(B == ET7Q);
I1cJ = false;
path = NdoG(B,Z_Xc,w8iv,tdpI,obXn, -ET7Q, hSQF, ET7Q);
if size(path,1) > 0
W = [W; path];
B = Qr5n(B,path,-ET7Q);
I1cJ = true;
end
if ~I1cJ
break
end
end
end
end
function [W B] = uXwe(hBgc,B,W,CHo9,hSQF,m1qh)
function n2DH()
for nSWO = 1:size(path,1);
if path(nSWO,1) == path(nSWO,3)
pioc(path(nSWO,1),path(nSWO,2)) = false;
pioc(path(nSWO,3),path(nSWO,4)) = false;
if path(nSWO,2) == path(nSWO,4)
B(path(nSWO,1),path(nSWO,2)) = -9999;
end
end
if path(nSWO,2) == path(nSWO,4)
K5FN(path(nSWO,1),path(nSWO,2)) = false;
K5FN(path(nSWO,3),path(nSWO,4)) = false;
end
end
end
[pioc K5FN] = ce2R(hBgc,B,W);
[NRBI f2kZ] = PDwY(B,m1qh);
if f2kZ < 1, return, end
NRBI=sortrows(NRBI,-m1qh);
for Naeu = 1:f2kZ
ET7Q = NRBI(Naeu,1);
aRIF = sum(B == -ET7Q);
if aRIF == 0
if NRBI(Naeu,2) >= 2
[tdpI obXn] = find(B == ET7Q);
yLXP = size(tdpI,1);
eS_w = yLXP*(yLXP-1)/2;
dist = zeros(eS_w,3);
SNU7 = 0;
for B3cr = 1:yLXP
for Zi5w = (B3cr+1):yLXP
SNU7 = SNU7 + 1;
dist(SNU7,1) = B3cr;
dist(SNU7,2) = Zi5w;
dist(SNU7,3) = abs(tdpI(B3cr)-tdpI(Zi5w)) + abs(obXn(B3cr)-obXn(Zi5w));
end
end
[LgOf RQMk] = sort(dist(:,3));
dist = dist(RQMk,:);
maxstep = min((CHo9*25)+hSQF,2*ET7Q+1);
I1cJ = false;
for SNU7 = 1:eS_w
if dist(SNU7,3) > maxstep+1
break
end
B3cr = dist(SNU7,1);
Zi5w = dist(SNU7,2);
path = alrK(B,pioc,K5FN,[tdpI(B3cr); tdpI(Zi5w)], [obXn(B3cr); obXn(Zi5w)], -ET7Q, CHo9, hSQF, 2*ET7Q);
if size(path,1) > 0
W = [W; path];
B = Qr5n(B,path,-ET7Q);
n2DH();
I1cJ = true;
break
end
end
if ~I1cJ
continue
end
end
end
[tdpI obXn] = find(B == ET7Q);
Z_dL = size(tdpI,1);
maxstep = min((CHo9*25)+hSQF,ET7Q+1);
for Osul = 1:Z_dL
[Z_Xc w8iv] = find(B == -ET7Q);
[tdpI obXn] = find(B == ET7Q);
I1cJ = false;
path = ARLF(B,pioc,K5FN,Z_Xc,w8iv,tdpI,obXn, -ET7Q, CHo9, hSQF, ET7Q);
if size(path,1) > 0
W = [W; path];
B = Qr5n(B,path,-ET7Q);
n2DH();
I1cJ = true;
end
if ~I1cJ
break
end
end
end
end
function path = ARLF(B,UGqt,lirh,rowS,colS,yTV3,dGN8,pmPS,CHo9,cp3C,THgh)
function path = YwNf(A8mr,step)
yJJG(A8mr) = wGfT;
path = zeros(step,4);
f_kg = 0;
yU8N = 0;
YUoi = zeros(step,1);
wDo6 = zeros(step,1);
TBYR = zeros(step,1);
while isempty(find(tqE6==A8mr,1))
f_kg = f_kg + 1;
YUoi(f_kg,1) = A8mr;
pgXP = yJJG(A8mr);
wDo6(f_kg,1) = pgXP;
A8mr = pgXP;
if EYWc(A8mr)
yU8N = yU8N + 1;
TBYR(yU8N,1) = A8mr;
end
end
YUoi = [ YUoi(1:f_kg,:) ; TBYR(1:yU8N,1) ];
wDo6 = [ wDo6(1:f_kg,:) ; TBYR(1:yU8N,1) ];
path = [ mod(YUoi,Fd3b) , ceil(YUoi/Fd3b) ,  mod(wDo6,Fd3b) , ceil(wDo6/Fd3b) ];
end
[Fd3b LeaN] = size(B);
EYWc = false(Fd3b,LeaN);
yJJG = zeros(Fd3b,LeaN);
z6WH = -ones(Fd3b,LeaN);
tqE6 = rowS + (colS-1)*Fd3b;
z6WH(tqE6) = 0;
z6WH(yTV3 + (dGN8-1)*Fd3b) = -2;
maxstep = min((CHo9*25)+cp3C,THgh+1);
HcVD = zeros(maxstep+26,1);
EXtr = [-1 1];
for step = 0:maxstep
if step == 0
uVKw = tqE6;
elseif HcVD(step) == 0
continue
else
uVKw = find(z6WH == step);
end
yLXP = numel(uVKw);
for Naeu = 1:yLXP
wGfT = uVKw(Naeu);
for IDf_ = 1:2
A8mr = wGfT + EXtr(IDf_) * Fd3b;
iYoI = z6WH(A8mr);
if iYoI == -2
path = YwNf(A8mr,step+1);
return
elseif iYoI == -1
if B(A8mr) == 0
z6WH(A8mr) = step+1; HcVD(step+1) = 1;
yJJG(A8mr) = wGfT;
elseif UGqt(A8mr)
z6WH(A8mr) = step+26; HcVD(step+26) = 1;
yJJG(A8mr) = wGfT;
EYWc(A8mr) = true;
end
end
end
for IDf_ = 1:2
A8mr = wGfT + EXtr(IDf_);
iYoI = z6WH(A8mr);
if iYoI == -2
path = YwNf(A8mr,step+1);
return
elseif iYoI == -1
if B(A8mr) == 0
z6WH(A8mr) = step+1; HcVD(step+1) = 1;
yJJG(A8mr) = wGfT;
elseif lirh(A8mr)
z6WH(A8mr) = step+26; HcVD(step+26) = 1;
yJJG(A8mr) = wGfT;
EYWc(A8mr) = true;
end
end
end
end
end
path = zeros(0,4);
end
function path = NdoG(B,rowS,colS,OwhW,DAn8,pmPS,p8Xc,THgh)
[Fd3b LeaN] = size(B);
LLYz = zeros(Fd3b,LeaN);
za_x = zeros(Fd3b,LeaN);
z6WH = -ones(Fd3b,LeaN);
z6WH(rowS+(colS-1)*Fd3b) = 0;
z6WH(OwhW+(DAn8-1)*Fd3b) = -2;
l2Hd = zeros(Fd3b*LeaN,1);
BXll = zeros(Fd3b*LeaN,1);
count = numel(rowS);
l2Hd(1:count) = rowS;
BXll(1:count) = colS;
h1Wj=[-1 1 0 0];
hAcH=[0 0 -1 1];
for step = 0:min(p8Xc,THgh)
if count < 1, break, end
yLXP = count;
GbkR = l2Hd(1:yLXP);
VNkd = BXll(1:yLXP);
count = 0;
for Naeu = 1:yLXP
LA_B = VNkd(Naeu);
wGfT = GbkR(Naeu);
for gSjj=1:4
hAYI = wGfT + h1Wj(gSjj);
Abas = LA_B + hAcH(gSjj);
A8mr = hAYI + (Abas-1)*Fd3b;
iYoI = z6WH(A8mr);
if iYoI == -2
XEIH=step+1;
LLYz(hAYI,Abas) = GbkR(Naeu);
za_x(hAYI,Abas) = VNkd(Naeu);
path = zeros(XEIH,4);
for Osul = 1:XEIH
path(Osul,1:2) = [hAYI Abas];
EnGy = LLYz(hAYI,Abas);
dcFT = za_x(hAYI,Abas);
path(Osul,3:4) = [EnGy dcFT];
hAYI = EnGy;
Abas = dcFT;
end
return
end
if iYoI == -1 && B(A8mr) == 0
z6WH(A8mr) = step+1;
LLYz(A8mr) = wGfT;
za_x(A8mr) = LA_B;
count = count + 1; l2Hd(count) = hAYI; BXll(count) = Abas;
end
end
end
end
path = [];
end