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

Marco Tullio 132

by Fabio

Status: Passed
Results: 133983.00 (cyc: 17, node: 6544)
CPU Time: 35.9344
Score: 13433.8
Submitted at: 2008-05-07 11:56:36 UTC
Scored at: 2008-05-07 17:05:49 UTC

Current Rank: 46th

Comments
Please login or create a profile.
Code
function W = solv(B)
Al8M=5266;
R3qD = rand(43,1);
W=ynZ9(B);
SHBF = hsoy(B,W);
[CpuS,DHDG] = size(B);
c2YX = B(CpuS:-1:1,:);
c2YX = c2YX.';
[l7TQ,hGbH] = TPb8(c2YX,[1 2],[1 2],4*CpuS*DHDG);
if SHBF > hGbH
W = [CpuS-l7TQ(:,2)+1 l7TQ(:,1) CpuS-l7TQ(:,4)+1 l7TQ(:,3)];
SHBF=hGbH;
end
yZvI=rand('state');
rand(Al8M,1);
if SHBF>1000
[l7TQ,hGbH] = TPb8(c2YX,[1 2],[1 2],4*CpuS*DHDG);
if SHBF > hGbH
W = [CpuS-l7TQ(:,2)+1 l7TQ(:,1) CpuS-l7TQ(:,4)+1 l7TQ(:,3)];
SHBF=hGbH;
end
end
rand('state',yZvI);
end
function [W,SHBF] = TPb8(oNfj,h6sH,Xdie,bpud)
[tf2x,s5o5]=size(oNfj);
LU7F= -ones(tf2x+2,s5o5+2);
LU7F(2:end-1,2:end-1)=oNfj;
XNzF = LU7F;
Sjfh = 4;
if size(XNzF,2) > 20
fr8Q = 4;
XrEy = 8;
tTdo = 18;
else
fr8Q = 3;
XrEy = 7;
tTdo = 13;
end
SHBF = inf;
HW2u = [1 2;2 1];
TPlZ = [1 3;3 1];
ubgj = [3 2 1;1 2 3];
for hiIn = h6sH
if hiIn == 2
[cWXu YV1T] = vZyf(XNzF,fr8Q,HW2u(hiIn,:));
[iK92 PWOI] = MSBp(YV1T,cWXu,XrEy,TPlZ(hiIn,:));
[XYFD Ttrh] = MSBp(PWOI,iK92,tTdo,TPlZ(hiIn,:));
else
[cWXu YV1T] = vZyf(XNzF,4,HW2u(hiIn,:));
[XYFD Ttrh] = MSBp(YV1T,cWXu,11,TPlZ(hiIn,:));
end
for URjN = Xdie
rILR = E1zg(XNzF,Ttrh,XYFD,Sjfh,tTdo,ubgj(URjN,:))-1;
Tdpn = hsoy(oNfj,rILR);
if Tdpn <= SHBF
SHBF = Tdpn;
W = rILR;
Sjfh = Sjfh - 1;
end
end
end
end
function EWyA = hsoy(B,W)
tf2x=size(B,1);
B(W(:,1)+(W(:,2)-1)*tf2x)=0;
B(W(:,3)+(W(:,4)-1)*tf2x)=0;
EWyA=sum(B(:))+size(W,1)+sum(W(:,1)==W(:,3)&W(:,2)==W(:,4))*24;
end
function [mXhI LJ4s] = IGhH(B,GHIO)
ahke = sort(B(B>0),'descend');
a_wR = size(ahke,1);
if a_wR < 1
mXhI = [];
LJ4s = 0;
return
end
Y9yo=ahke(diff([0;ahke])~=0);
mXhI = zeros(nnz(Y9yo),3);
UI0o=histc(ahke,Y9yo(end:-1:1));
mXhI(:,1)=Y9yo;
mXhI(:,2)=UI0o(end:-1:1);
LJ4s=nnz(Y9yo);
if GHIO < 3, return, end
for Tn_7 = 1:LJ4s
if mXhI(Tn_7,2) >= 2
KkwQ = mXhI(Tn_7,1);
[xQRh tt2H] = find(B == KkwQ);
vnFI = 0;
VTwM = size(xQRh,1);
vnFI=sum(abs(diff(xQRh))+abs(diff(tt2H)));
mXhI(Tn_7,3) = mXhI(Tn_7,2)*KkwQ - 0.85 * vnFI;
end
end
end
function [W B] = vZyf(B,tTdo,GHIO)
W = [];
[mXhI LJ4s] = IGhH(B,GHIO);
if LJ4s < 1
return
end
mXhI=sortrows(mXhI,-GHIO);
for Tn_7 = 1:LJ4s
if mXhI(Tn_7,2) >= 2
KkwQ = mXhI(Tn_7,1);
[xQRh tt2H] = find(B == KkwQ);
VTwM = size(xQRh,1);
fMYH = VTwM*(VTwM-1)/2;
dist = zeros(fMYH,3);
[EfT0 H_o3]=find(tril(ones(VTwM),-1));
dist(:,1)=H_o3;
dist(:,2)=EfT0;
dist(:,3)=abs(tt2H(EfT0)-tt2H(H_o3))+abs(xQRh(EfT0)-xQRh(H_o3));
[vnFI ogmJ] = sort(dist(:,3));
dist = dist(ogmJ,:);
a_wR = 0;
for hiIn = 1:fMYH
if dist(hiIn,3) > tTdo+1
break
end
AVV0 = dist(hiIn,1);
DOJI = dist(hiIn,2);
path = NFiK(B,[xQRh(AVV0); xQRh(DOJI)], [tt2H(AVV0); tt2H(DOJI)], -KkwQ, tTdo, 2*KkwQ);
if size(path,1) > 0
W = [W; path];
B = ENB4(B,path,-KkwQ);
a_wR = 2;
edit = [1:(AVV0-1) (AVV0+1):(DOJI-1) (DOJI+1):VTwM];
xQRh = [xQRh(AVV0); xQRh(DOJI); xQRh(edit)];
tt2H = [tt2H(AVV0); tt2H(DOJI); tt2H(edit)];
break
else
end
end
if a_wR < 2
continue
end
for XJbA = 3:VTwM
[zx_L GB1f] = find(B == -KkwQ);
jhE_ = size(zx_L,1);
fMYH =  jhE_ * (VTwM - a_wR);
zBYk = (1:jhE_*VTwM)';
DOJI=mod(zBYk-1,VTwM)+1;
AVV0=ceil(zBYk/VTwM);
kKcu = (DOJI>a_wR);
AVV0 = AVV0(kKcu);
DOJI = DOJI(kKcu);
vnFI = abs(zx_L(AVV0)-xQRh(DOJI)) + abs(GB1f(AVV0)-tt2H(DOJI));
dist = [AVV0,DOJI,vnFI];
[vnFI ogmJ] = sort(dist(:,3));
dist = dist(ogmJ,:);
iE6i = false(VTwM,1);
hc4O = false;
for hiIn = 1:fMYH
if dist(hiIn,3) > tTdo+1
break
end
DOJI = dist(hiIn,2);
if iE6i(DOJI)
randperm(4);
continue
end
AVV0 = dist(hiIn,1);
path = NFiK(B,[zx_L(AVV0); xQRh(DOJI)], [GB1f(AVV0); tt2H(DOJI)], -KkwQ, tTdo, KkwQ);
iE6i(DOJI)=true;
if size(path,1) > 0
W = [W; path];
B = ENB4(B,path,-KkwQ);
a_wR = a_wR + 1;
hc4O = true;
xQRh([XJbA DOJI]) = xQRh([DOJI XJbA]);
tt2H([XJbA DOJI]) = tt2H([DOJI XJbA]);
break
end
end
if ~hc4O
break
end
end
end
end
end
function [W B] = MSBp(B,W,TB4M,GHIO)
[mXhI LJ4s] = IGhH(B,GHIO);
if LJ4s < 1, return, end
mXhI=sortrows(mXhI,-GHIO);
for Tn_7 = 1:LJ4s
KkwQ = mXhI(Tn_7,1);
jhE_ = sum(B == -KkwQ);
if jhE_ == 0
if mXhI(Tn_7,2) >= 2
[xQRh tt2H] = find(B == KkwQ);
VTwM = size(xQRh,1);
fMYH = VTwM*(VTwM-1)*.5;
zBYk = (1:VTwM*VTwM)';
DOJI=mod(zBYk-1,VTwM)+1;
AVV0=ceil(zBYk/VTwM);
kKcu = (AVV0<DOJI);
AVV0 = AVV0(kKcu);
DOJI = DOJI(kKcu);
vnFI = abs(xQRh(AVV0)-xQRh(DOJI)) + abs(tt2H(AVV0)-tt2H(DOJI));
dist = [AVV0,DOJI,vnFI];
[vnFI ogmJ] = sort(dist(:,3));
dist = dist(ogmJ,:);
maxstep = min(TB4M,2*KkwQ+1);
hc4O = false;
for hiIn = 1:fMYH
if dist(hiIn,3) > maxstep+1
break
end
AVV0 = dist(hiIn,1);
DOJI = dist(hiIn,2);
path = NFiK(B,[xQRh(AVV0); xQRh(DOJI)], [tt2H(AVV0); tt2H(DOJI)], -KkwQ, TB4M, 2*KkwQ);
if size(path,1) > 0
W = [W; path];
B = ENB4(B,path,-KkwQ);
hc4O = true;
break
end
end
if ~hc4O
continue
end
end
end
[xQRh tt2H] = find(B == KkwQ);
OfPk = size(xQRh,1);
maxstep = min(TB4M,KkwQ+1);
for XJbA = 1:OfPk
[zx_L GB1f] = find(B == -KkwQ);
jhE_ = size(zx_L,1);
fMYH =  jhE_ * (OfPk-XJbA+1);
dist = zeros(fMYH,3);
hiIn = 0;
for AVV0 = 1:jhE_
for DOJI = XJbA:OfPk
hiIn = hiIn + 1;
dist(hiIn,1) = AVV0;
dist(hiIn,2) = DOJI;
dist(hiIn,3) = abs(zx_L(AVV0)-xQRh(DOJI)) + abs(GB1f(AVV0)-tt2H(DOJI));
end
end
[vnFI ogmJ] = sort(dist(:,3));
dist = dist(ogmJ,:);
iE6i = false(OfPk,1);
hc4O = false;
for hiIn = 1:fMYH
if dist(hiIn,3) > maxstep+1
break
end
DOJI = dist(hiIn,2);
if iE6i(DOJI)
randperm(4);
continue
end
AVV0 = dist(hiIn,1);
path = NFiK(B,[zx_L(AVV0); xQRh(DOJI)], [GB1f(AVV0); tt2H(DOJI)], -KkwQ, TB4M, 2*KkwQ);
iE6i(DOJI)=true;
if size(path,1) > 0
W = [W; path];
B = ENB4(B,path,-KkwQ);
hc4O = true;
xQRh([XJbA DOJI]) = xQRh([DOJI XJbA]);
tt2H([XJbA DOJI]) = tt2H([DOJI XJbA]);
break
end
end
if ~hc4O
break
end
end
end
end
function [wJLY zdLb] = vrwR(LU7F,B,path)
[ScYk itvw] = size(B);
wJLY = LU7F == 0;
zdLb = wJLY;
wJLY(:,[1 itvw]) = false;
zdLb([1 ScYk],:) = false;
for Tn_7 = 1:size(path,1)
if path(Tn_7,1) == path(Tn_7,3)
wJLY(path(Tn_7,1),path(Tn_7,2)) = false;
wJLY(path(Tn_7,3),path(Tn_7,4)) = false;
end
if path(Tn_7,2) == path(Tn_7,4)
zdLb(path(Tn_7,1),path(Tn_7,2)) = false;
zdLb(path(Tn_7,3),path(Tn_7,4)) = false;
end
end
end
function B = ENB4(B,path,XHgl)
B(path(1,1),path(1,2)) = XHgl;
for Tn_7 = 1:size(path,1);
B(path(Tn_7,3),path(Tn_7,4)) = XHgl;
end
end
function path = iIZN(U3xK,Xvtp,ScYk,TNRP)
path = zeros(TNRP,4);
G8NH = mod(U3xK,ScYk);
L2HH = ceil(U3xK/ScYk);
for XJbA = 1:TNRP
path(XJbA,1:2) = [G8NH L2HH];
U3xK = Xvtp(U3xK);
G8NH = mod(U3xK,ScYk);
L2HH = ceil(U3xK/ScYk);
path(XJbA,3:4) = [G8NH L2HH];
end
end
function path = NFiK(B,xQRh,tt2H,XHgl,tTdo,sD9T)
[ScYk itvw] = size(B);
Xvtp = zeros(ScYk,itvw);
KwVG = -ones(ScYk,itvw);
KwVG(xQRh(2),tt2H(2)) = 0;
KwVG(xQRh(1),tt2H(1)) = -2;
KwVG( B == XHgl ) = -2;
hI4W = zeros(ScYk*itvw,1);
hI4W(1) = xQRh(2) + (tt2H(2)-1)*ScYk;
count = 1;
ouxO = [-1 1 -ScYk ScYk];
L8vj = randperm(4);
for step = 0:min(tTdo,sD9T)
if count < 1, break, end
VTwM = count;
U3xK = hI4W;
count = 0;
for Tn_7 = 1:VTwM
uZiN = U3xK(Tn_7);
for Bg8Y=1:4
mMtI = uZiN + ouxO(L8vj(Bg8Y));
HXUh = KwVG(mMtI);
if HXUh == -2
Xvtp(mMtI) = uZiN;
path = iIZN(mMtI,Xvtp,ScYk,step+1);
return
end
if HXUh == -1 && B(mMtI) == 0
KwVG(mMtI) = step+1;
Xvtp(mMtI) = uZiN;
count = count + 1;
hI4W(count) = mMtI;
end
end
end
end
path = [];
end
function path = PzFE(B,wJLY,zdLb,xQRh,tt2H,XHgl,Sjfh,TB4M,sD9T)
[ScYk itvw] = size(B);
Y8K0 = false(ScYk,itvw);
Xvtp = zeros(ScYk,itvw);
KwVG = -ones(ScYk,itvw);
KwVG(xQRh(1),tt2H(1)) = -2;
KwVG( B == XHgl ) = -2;
maxstep = min((Sjfh*27)+TB4M,sD9T+1);
YuQU = zeros(maxstep+28,1);
YuQU(1) = xQRh(2) + (tt2H(2)-1)*ScYk;
ouxO = [-ScYk ScYk -1 1];
for step = 1:maxstep
while YuQU(step)>0
uZiN = YuQU(step);
YuQU(step)=KwVG(uZiN);
for Bg8Y = 1:4
mMtI = uZiN + ouxO(Bg8Y);
HXUh = KwVG(mMtI);
if HXUh==-1
if B(mMtI) == 0
KwVG(mMtI) = YuQU(step+1);
YuQU(step+1) = mMtI;
Xvtp(mMtI) = uZiN;
elseif (wJLY(mMtI)&&(Bg8Y<3)) || (zdLb(mMtI)&&(Bg8Y>2))
KwVG(mMtI) = YuQU(step+26);
YuQU(step+26) = mMtI;
Xvtp(mMtI) = uZiN;
Y8K0(mMtI) = true;
end
end
if HXUh==-2
step=step+1;
Xvtp(mMtI) = uZiN;
G8NH=mod(mMtI,ScYk);
L2HH=ceil(mMtI/ScYk);
path = zeros(step,4);
XJbA = 0;
while G8NH ~= xQRh(2) || L2HH ~= tt2H(2)
XJbA = XJbA + 1;
path(XJbA,1:2) = [G8NH L2HH];
mMtI = G8NH + (L2HH-1)*ScYk;
F1_j = Xvtp(mMtI);
UJ_h=mod(F1_j,ScYk);
dZLp=ceil(F1_j/ScYk);
path(XJbA,3:4) = [UJ_h dZLp];
G8NH = UJ_h;
L2HH = dZLp;
if Y8K0(G8NH,L2HH)
XJbA = XJbA + 1;
path(XJbA,:) = [G8NH L2HH G8NH L2HH];
end
end
path = path(1:XJbA,:);
return
end
end
end
end
path = [];
end
function W = ynZ9(B)
[W,SHBF] = WsmT(B);
sHdd = 0;
oYyq = round(mod(B(:),2));
if SHBF < 2100
return
end
[LfNN,HFKh] = size(B);
B = flipud(fliplr(B'));
[RDzR,SEwD] = WsmT(B);
if SHBF > SEwD
W = [LfNN-RDzR(:,2)+1 HFKh-RDzR(:,1)+1 LfNN-RDzR(:,4)+1 HFKh-RDzR(:,3)+1];
end
if oYyq~=sHdd;        W = zeros(0,4);    end
end
function [W,SHBF] = WsmT(B)
[tf2x,s5o5]=size(B);
uHTA=nan(tf2x+2,s5o5+2);
uHTA(2:end-1,2:end-1)=B;
XNzF = uHTA;
Sjfh = 4;
if size(XNzF,2) > 20
fr8Q = 4;
XrEy = 8;
tTdo = 12;
else
fr8Q = 3;
XrEy = 7;
tTdo = 11;
end
SHBF = inf;
HW2u = [1 2;2 1];
TPlZ = [1 3;3 1];
ubgj = [3 2 1;1 2 3];
for hiIn = 1:2
if hiIn == 2
[cWXu YV1T] = tCKg(XNzF,fr8Q,HW2u(hiIn,:));
[iK92 PWOI] = h998(YV1T,cWXu,XrEy,TPlZ(hiIn,:));
[XYFD Ttrh] = h998(PWOI,iK92,tTdo,TPlZ(hiIn,:));
else
[cWXu YV1T] = tCKg(XNzF,4,HW2u(hiIn,:));
[XYFD Ttrh] = h998(YV1T,cWXu,11,TPlZ(hiIn,:));
end
for URjN = 1:2
if hiIn == 2 && URjN == 2 && SHBF > 2100, return, end
rILR = E1zg(XNzF,Ttrh,XYFD,Sjfh,tTdo,ubgj(URjN,:))-1;
Tdpn = hsoy(B,rILR);
if Tdpn <= SHBF
SHBF = Tdpn;
W = rILR;
Sjfh = Sjfh - 1;
end
end
end
if tf2x*s5o5 > 290; return; end
yffI = sum(W(:,1)==W(:,3)&W(:,2)==W(:,4));
if yffI <= 4
xaPI = BIFD(B);
zMsV = hsoy(B,xaPI);
if zMsV < SHBF
W = xaPI;
SHBF = zMsV;
end
end
end
function path = J0dY(B,xQRh,tt2H,XHgl,tTdo,sD9T)
function path = Tc5U(WxO_,Sik1,mlJZ)
dg3w(WxO_,Sik1) = tU20(Tn_7);
fdyQ(WxO_,Sik1) = lBSl(Tn_7);
path = zeros(mlJZ,4);
for TcSl = 1:mlJZ
path(TcSl,1:2) = [WxO_ Sik1];
LMcl = dg3w(WxO_,Sik1);
PjNx = fdyQ(WxO_,Sik1);
path(TcSl,3:4) = [LMcl PjNx];
WxO_ = LMcl;
Sik1 = PjNx;
end
end
[ScYk itvw] = size(B);
dg3w = zeros(ScYk,itvw);
fdyQ = zeros(ScYk,itvw);
KwVG = -ones(ScYk,itvw);
KwVG(xQRh(2),tt2H(2)) = 0;
KwVG(xQRh(1),tt2H(1)) = -2;
KwVG( B == XHgl ) = -2;
WdPo = zeros(ScYk*itvw,1);
mzCD = zeros(ScYk*itvw,1);
count = 1;
WdPo(1) = xQRh(2);
mzCD(1) = tt2H(2);
HuiJ=[-1 1 0 0];
g80P=[0 0 -1 1];
for step = 0:min(tTdo,sD9T)
if count < 1, break, end
VTwM = count;
tU20 = WdPo(1:VTwM);
lBSl = mzCD(1:VTwM);
count = 0;
for Tn_7 = 1:VTwM
FNdN = lBSl(Tn_7);
uZiN = tU20(Tn_7);
for Bg8Y=1:4
WxO_ = uZiN + HuiJ(Bg8Y);
Sik1 = FNdN + g80P(Bg8Y);
mMtI = WxO_ + (Sik1-1)*ScYk;
HXUh = KwVG(mMtI);
if HXUh == -2
path = Tc5U(WxO_,Sik1,step+1);
return
elseif HXUh == -1 && B(mMtI) == 0
KwVG(mMtI) = step+1;
dg3w(mMtI) = uZiN;
fdyQ(mMtI) = FNdN;
count = count + 1; WdPo(count) = WxO_; mzCD(count) = Sik1;
end
end
end
end
path = [];
end
function jh1T = BIFD(DOJI)
KkwQ = unique(DOJI);
KkwQ(1) = [];
xhnE = zeros(size(KkwQ));
for Tn_7 = 1:length(xhnE)
xhnE(Tn_7) = nnz(KkwQ(Tn_7) == DOJI(:));
end
for Tn_7 = 1:length(xhnE)
if xhnE(Tn_7) == 1
DOJI(KkwQ(Tn_7) == DOJI(:)) = -1;
end
end
RfUP = zeros(size(DOJI)+2);
LRFe = repmat(-1,size(RfUP));
LRFe(2:end-1,2:end-1) = DOJI;
jh1T = [];
[uZG8, QFFD] = find(LRFe>0);
vnFI = (size(LRFe,1)/2 - uZG8).^2 + (size(LRFe,2)/2 - QFFD).^2;
[vnFI, order] = sort(vnFI);
order = order';
for LJ4s = 1:length(uZG8)-1
idmz = 0;
Jc9Y = 32;
for Tn_7 = order
if RfUP(uZG8(Tn_7), QFFD(Tn_7))
continue
end
[EWyA, Q8NY, FyJu] = tRvD(LRFe, RfUP, uZG8(Tn_7), QFFD(Tn_7), Jc9Y);
if EWyA > idmz
idmz = EWyA;
p74T = Q8NY;
Jc9Y = FyJu;
if Jc9Y == 1
break
end
end
end
if idmz == 0
jh1T = jh1T - 1;
return
end
RfUP = ENB4(RfUP, p74T, LRFe(p74T(1,1), p74T(1,2)));
LRFe = ENB4(LRFe, p74T, LRFe(p74T(1,1), p74T(1,2)));
jh1T = [jh1T; p74T];
end
jh1T = jh1T - 1;
end
function [idmz, p74T, Jc9Y] = tRvD(DOJI, RfUP, U3xK, lBSl, n1Yp)
idmz = 0;
p74T = [];
TcSl = [1 -1 0 0];
LJ4s = [0 0 1 -1];
if ~any(RfUP(:)==DOJI(U3xK,lBSl))
RfUP = DOJI;
end
LRFe = DOJI;
LRFe(LRFe>0) = -1;
LRFe(U3xK,lBSl) = 1;
Jc9Y = Inf;
KkwQ = DOJI(U3xK,lBSl);
for Tn_7 = 1:n1Yp-2
[uZG8, QFFD] = find(LRFe==Tn_7);
for xhnE = 1:length(uZG8)
for WkRx = 1:4
ZnA3 = uZG8(xhnE) + TcSl(WkRx);
u3T_ = QFFD(xhnE) + LJ4s(WkRx);
if RfUP(ZnA3,u3T_) == KkwQ && ~(ZnA3 == U3xK && u3T_ == lBSl)
Jc9Y = Tn_7;
break
end
zmCR = LRFe(ZnA3,u3T_);
if zmCR == 0
LRFe(ZnA3,u3T_) = Tn_7+1;
end
end
if Jc9Y < Inf
break
end
end
if Jc9Y < Inf
break
end
end
if Jc9Y == Inf
return
end
idmz = DOJI(U3xK,lBSl) - Jc9Y;
if Jc9Y == 1
p74T = [U3xK, lBSl, ZnA3, u3T_];
return
end
p74T = zeros(Jc9Y,4);
for step = Jc9Y:-1:1
for WkRx = 1:4
acaP = ZnA3 + TcSl(WkRx);
NMXA = u3T_ + LJ4s(WkRx);
if LRFe(acaP, NMXA) == step
break
end
end
p74T(step,:) = [acaP, NMXA, ZnA3, u3T_];
ZnA3 = acaP;
u3T_ = NMXA;
end
end
function [W B] = tCKg(B,tTdo,GHIO)
W = [];
[mXhI LJ4s] = IGhH(B,GHIO);
if LJ4s < 1
return
end
mXhI=sortrows(mXhI,-GHIO);
for Tn_7 = 1:LJ4s
if mXhI(Tn_7,2) >= 2
KkwQ = mXhI(Tn_7,1);
[xQRh tt2H] = find(B == KkwQ);
VTwM = size(xQRh,1);
fMYH = VTwM*(VTwM-1)/2;
dist = zeros(fMYH,3);
hiIn = 0;
for AVV0 = 1:VTwM
for DOJI = (AVV0+1):VTwM
hiIn = hiIn + 1;
dist(hiIn,1) = AVV0;
dist(hiIn,2) = DOJI;
dist(hiIn,3) = abs(xQRh(AVV0)-xQRh(DOJI)) + abs(tt2H(AVV0)-tt2H(DOJI));
end
end
[vnFI ogmJ] = sort(dist(:,3));
dist = dist(ogmJ,:);
Q41N = reshape(dist(:,1:2)',[],1);
a_wR = 0;
pDor = 1;
Bpoc = false(VTwM,1);
for Tn_7=1:VTwM
JFGZ = find( ~Bpoc(Q41N(pDor:end)) , 1 , 'first');
if isempty(JFGZ)
break
end
AVV0 = Q41N(JFGZ);
Distance = abs(xQRh([1:AVV0-1,AVV0+1:end]')-xQRh(AVV0)) + abs(tt2H([1:AVV0-1,AVV0+1:end]')-tt2H(AVV0));
if max(Distance)>tTdo-1
break
end
path = RKwx(B,xQRh(AVV0),tt2H(AVV0),xQRh([1:AVV0-1,AVV0+1:end]'),tt2H([1:AVV0-1,AVV0+1:end]'), -KkwQ, tTdo, 2*KkwQ);
if size(path,1) > 0
W = [W; path];
B = ENB4(B,path,-KkwQ);
a_wR = 2;
break
end
end
if a_wR < 2
continue
end
for TcSl = 3:VTwM
[zx_L GB1f] = find(B == -KkwQ);
[xQRh tt2H] = find(B == KkwQ);
[jVts,xNWn] = meshgrid(xQRh,zx_L);
[lSm9,C4Ib] = meshgrid(xQRh,zx_L);
Distance = abs(jVts-xNWn) + abs(lSm9-C4Ib);
if max(Distance(:))>tTdo-1
break
end
path = RKwx(B,zx_L,GB1f,xQRh,tt2H, -KkwQ, tTdo, 2*KkwQ);
if size(path,1) > 0
W = [W; path];
B = ENB4(B,path,-KkwQ);
hc4O = true;
else
break
end
end
end
end
end
function [W B] = h998(B,W,WNYQ,GHIO)
[mXhI LJ4s] = IGhH(B,GHIO);
if LJ4s < 1, return, end
mXhI=sortrows(mXhI,-GHIO);
for Tn_7 = 1:LJ4s
KkwQ = mXhI(Tn_7,1);
jhE_ = sum(B == -KkwQ);
if jhE_ == 0
if mXhI(Tn_7,2) >= 2
[xQRh tt2H] = find(B == KkwQ);
VTwM = size(xQRh,1);
fMYH = VTwM*(VTwM-1)/2;
dist = zeros(fMYH,3);
hiIn = 0;
for AVV0 = 1:VTwM
for DOJI = (AVV0+1):VTwM
hiIn = hiIn + 1;
dist(hiIn,1) = AVV0;
dist(hiIn,2) = DOJI;
dist(hiIn,3) = abs(xQRh(AVV0)-xQRh(DOJI)) + abs(tt2H(AVV0)-tt2H(DOJI));
end
end
[vnFI ogmJ] = sort(dist(:,3));
dist = dist(ogmJ,:);
maxstep = min(WNYQ,2*KkwQ+1);
hc4O = false;
for hiIn = 1:fMYH
if dist(hiIn,3) > maxstep+1
break
end
AVV0 = dist(hiIn,1);
DOJI = dist(hiIn,2);
path = J0dY(B,[xQRh(AVV0); xQRh(DOJI)], [tt2H(AVV0); tt2H(DOJI)], -KkwQ, WNYQ, 2*KkwQ);
if size(path,1) > 0
W = [W; path];
B = ENB4(B,path,-KkwQ);
hc4O = true;
break
end
end
if ~hc4O
continue
end
end
end
[xQRh tt2H] = find(B == KkwQ);
cj3L = size(xQRh,1);
maxstep = min(WNYQ,KkwQ+1);
for TcSl = 1:cj3L
[zx_L GB1f] = find(B == -KkwQ);
[xQRh tt2H] = find(B == KkwQ);
hc4O = false;
path = RKwx(B,zx_L,GB1f,xQRh,tt2H, -KkwQ, WNYQ, KkwQ);
if size(path,1) > 0
W = [W; path];
B = ENB4(B,path,-KkwQ);
hc4O = true;
end
if ~hc4O
break
end
end
end
end
function [W B] = E1zg(uHTA,B,W,Sjfh,WNYQ,GHIO)
function eloj()
for jh1T = 1:size(path,1);
if path(jh1T,1) == path(jh1T,3)
zwFI(path(jh1T,1),path(jh1T,2)) = false;
zwFI(path(jh1T,3),path(jh1T,4)) = false;
if path(jh1T,2) == path(jh1T,4)
B(path(jh1T,1),path(jh1T,2)) = -9999;
end
end
if path(jh1T,2) == path(jh1T,4)
oLBF(path(jh1T,1),path(jh1T,2)) = false;
oLBF(path(jh1T,3),path(jh1T,4)) = false;
end
end
end
[zwFI oLBF] = vrwR(uHTA,B,W);
[mXhI LJ4s] = IGhH(B,GHIO);
if LJ4s < 1, return, end
mXhI=sortrows(mXhI,-GHIO);
for Tn_7 = 1:LJ4s
KkwQ = mXhI(Tn_7,1);
jhE_ = sum(B == -KkwQ);
if jhE_ == 0
if mXhI(Tn_7,2) >= 2
[xQRh tt2H] = find(B == KkwQ);
VTwM = size(xQRh,1);
fMYH = VTwM*(VTwM-1)/2;
dist = zeros(fMYH,3);
hiIn = 0;
for AVV0 = 1:VTwM
for DOJI = (AVV0+1):VTwM
hiIn = hiIn + 1;
dist(hiIn,1) = AVV0;
dist(hiIn,2) = DOJI;
dist(hiIn,3) = abs(xQRh(AVV0)-xQRh(DOJI)) + abs(tt2H(AVV0)-tt2H(DOJI));
end
end
[vnFI ogmJ] = sort(dist(:,3));
dist = dist(ogmJ,:);
maxstep = min((Sjfh*25)+WNYQ,2*KkwQ+1);
hc4O = false;
for hiIn = 1:fMYH
if dist(hiIn,3) > maxstep+1
break
end
AVV0 = dist(hiIn,1);
DOJI = dist(hiIn,2);
path = PzFE(B,zwFI,oLBF,[xQRh(AVV0); xQRh(DOJI)], [tt2H(AVV0); tt2H(DOJI)], -KkwQ, Sjfh, WNYQ, 2*KkwQ);
if size(path,1) > 0
W = [W; path];
B = ENB4(B,path,-KkwQ);
eloj();
hc4O = true;
break
end
end
if ~hc4O
continue
end
end
end
[xQRh tt2H] = find(B == KkwQ);
cj3L = size(xQRh,1);
maxstep = min((Sjfh*25)+WNYQ,KkwQ+1);
for TcSl = 1:cj3L
[zx_L GB1f] = find(B == -KkwQ);
[xQRh tt2H] = find(B == KkwQ);
hc4O = false;
path = vwtn(B,zwFI,oLBF,zx_L,GB1f,xQRh,tt2H, -KkwQ, Sjfh, WNYQ, KkwQ);
if size(path,1) > 0
W = [W; path];
B = ENB4(B,path,-KkwQ);
eloj();
hc4O = true;
end
if ~hc4O
break
end
end
end
end
function path = vwtn(B,wJLY,zdLb,rowS,colS,UzLl,zl44,XHgl,Sjfh,TB4M,sD9T)
function path = iIZN(mMtI,step)
Xvtp(mMtI) = uZiN;
path = zeros(step,4);
XJbA = 0;
chMd = 0;
oeYi = zeros(step,1);
B3Hs = zeros(step,1);
WQDv = zeros(step,1);
while isempty(find(G0a7==mMtI,1))
XJbA = XJbA + 1;
oeYi(XJbA,1) = mMtI;
F1_j = Xvtp(mMtI);
B3Hs(XJbA,1) = F1_j;
mMtI = F1_j;
if Y8K0(mMtI)
chMd = chMd + 1;
WQDv(chMd,1) = mMtI;
end
end
oeYi = [ oeYi(1:XJbA,:) ; WQDv(1:chMd,1) ];
B3Hs = [ B3Hs(1:XJbA,:) ; WQDv(1:chMd,1) ];
path = [ mod(oeYi,ScYk) , ceil(oeYi/ScYk) ,  mod(B3Hs,ScYk) , ceil(B3Hs/ScYk) ];
end
[ScYk itvw] = size(B);
Y8K0 = false(ScYk,itvw);
Xvtp = zeros(ScYk,itvw);
KwVG = -ones(ScYk,itvw);
G0a7 = rowS + (colS-1)*ScYk;
KwVG(G0a7) = 0;
KwVG(UzLl + (zl44-1)*ScYk) = -2;
maxstep = min((Sjfh*25)+TB4M,sD9T+1);
ETMN = zeros(maxstep+26,1);
yU14 = [-1 1];
for step = 0:maxstep
if step == 0
U3xK = G0a7;
elseif ETMN(step) == 0
continue
else
U3xK = find(KwVG == step);
end
VTwM = numel(U3xK);
for Tn_7 = 1:VTwM
uZiN = U3xK(Tn_7);
for cvjk = 1:2
mMtI = uZiN + yU14(cvjk) * ScYk;
HXUh = KwVG(mMtI);
if HXUh == -2
path = iIZN(mMtI,step+1);
return
elseif HXUh == -1
if B(mMtI) == 0
KwVG(mMtI) = step+1; ETMN(step+1) = 1;
Xvtp(mMtI) = uZiN;
elseif wJLY(mMtI)
KwVG(mMtI) = step+26; ETMN(step+26) = 1;
Xvtp(mMtI) = uZiN;
Y8K0(mMtI) = true;
end
end
end
for cvjk = 1:2
mMtI = uZiN + yU14(cvjk);
HXUh = KwVG(mMtI);
if HXUh == -2
path = iIZN(mMtI,step+1);
return
elseif HXUh == -1
if B(mMtI) == 0
KwVG(mMtI) = step+1; ETMN(step+1) = 1;
Xvtp(mMtI) = uZiN;
elseif zdLb(mMtI)
KwVG(mMtI) = step+26; ETMN(step+26) = 1;
Xvtp(mMtI) = uZiN;
Y8K0(mMtI) = true;
end
end
end
end
end
path = zeros(0,4);
end
function path = RKwx(B,rowS,colS,KkdH,ELKe,XHgl,tTdo,sD9T)
[ScYk itvw] = size(B);
dg3w = zeros(ScYk,itvw);
fdyQ = zeros(ScYk,itvw);
KwVG = -ones(ScYk,itvw);
KwVG(rowS+(colS-1)*ScYk) = 0;
KwVG(KkdH+(ELKe-1)*ScYk) = -2;
hI4W = zeros(ScYk*itvw,1);
mzCD = zeros(ScYk*itvw,1);
count = numel(rowS);
hI4W(1:count) = rowS;
mzCD(1:count) = colS;
HuiJ=[-1 1 0 0];
g80P=[0 0 -1 1];
for step = 0:min(tTdo,sD9T)
if count < 1, break, end
VTwM = count;
tU20 = hI4W(1:VTwM);
lBSl = mzCD(1:VTwM);
count = 0;
for Tn_7 = 1:VTwM
FNdN = lBSl(Tn_7);
uZiN = tU20(Tn_7);
for Bg8Y=1:4
WxO_ = uZiN + HuiJ(Bg8Y);
Sik1 = FNdN + g80P(Bg8Y);
mMtI = WxO_ + (Sik1-1)*ScYk;
HXUh = KwVG(mMtI);
if HXUh == -2
mlJZ=step+1;
dg3w(WxO_,Sik1) = tU20(Tn_7);
fdyQ(WxO_,Sik1) = lBSl(Tn_7);
path = zeros(mlJZ,4);
for TcSl = 1:mlJZ
path(TcSl,1:2) = [WxO_ Sik1];
LMcl = dg3w(WxO_,Sik1);
PjNx = fdyQ(WxO_,Sik1);
path(TcSl,3:4) = [LMcl PjNx];
WxO_ = LMcl;
Sik1 = PjNx;
end
return
end
if HXUh == -1 && B(mMtI) == 0
KwVG(mMtI) = step+1;
dg3w(mMtI) = uZiN;
fdyQ(mMtI) = FNdN;
count = count + 1; hI4W(count) = WxO_; mzCD(count) = Sik1;
end
end
end
end
path = [];
end