ID:49670
Title:Marco Tullio 134
Author:Fabio Carnevale
Date:2008-05-07 11:56:41
Score:13417.8153
Result:133828.00 (cyc: 17, node: 6544)
CPU Time:35.6036
Status:Passed
Comments:
Based on:none
Code:
function W = solv(B)
iI7P=6192;
wVrV = rand(43,1);
W=iwrt(B);
jfVC = lWpu(B,W);
[Upqg,MJpU] = size(B);
VIDG = B(Upqg:-1:1,:);
VIDG = VIDG.';
[TgW4,Ao_q] = P3es(VIDG,[1 2],[1 2],4*Upqg*MJpU);
if jfVC > Ao_q
W = [Upqg-TgW4(:,2)+1 TgW4(:,1) Upqg-TgW4(:,4)+1 TgW4(:,3)];
jfVC=Ao_q;
end
qpoz=rand('state');
rand(iI7P,1);
if jfVC>1000
[TgW4,Ao_q] = P3es(VIDG,[1 2],[1 2],4*Upqg*MJpU);
if jfVC > Ao_q
W = [Upqg-TgW4(:,2)+1 TgW4(:,1) Upqg-TgW4(:,4)+1 TgW4(:,3)];
jfVC=Ao_q;
end
end
rand('state',qpoz);
end
function [W,jfVC] = P3es(YyWj,mMCE,R0bC,VOEY)
[xto8,nFG2]=size(YyWj);
tOEj= -ones(xto8+2,nFG2+2);
tOEj(2:end-1,2:end-1)=YyWj;
ZbMU = tOEj;
rxS5 = 4;
if size(ZbMU,2) > 20
bvsR = 4;
S45c = 8;
AjBi = 18;
else
bvsR = 3;
S45c = 7;
AjBi = 13;
end
jfVC = inf;
v8Rq = [1 2;2 1];
Ba3k = [1 3;3 1];
cxMk = [3 2 1;1 2 3];
for Pzc9 = mMCE
if Pzc9 == 2
[XOBR KxG9] = pyrX(ZbMU,bvsR,v8Rq(Pzc9,:));
[lTdF HOmV] = J8KF(KxG9,XOBR,S45c,Ba3k(Pzc9,:));
[oGPG criT] = J8KF(HOmV,lTdF,AjBi,Ba3k(Pzc9,:));
else
[XOBR KxG9] = pyrX(ZbMU,4,v8Rq(Pzc9,:));
[oGPG criT] = J8KF(KxG9,XOBR,11,Ba3k(Pzc9,:));
end
for yZjX = R0bC
duQL = t7KN(ZbMU,criT,oGPG,rxS5,AjBi,cxMk(yZjX,:))-1;
GcCJ = lWpu(YyWj,duQL);
if GcCJ <= jfVC
jfVC = GcCJ;
W = duQL;
rxS5 = rxS5 - 1;
end
end
end
end
function UF1r = lWpu(B,W)
xto8=size(B,1);
B(W(:,1)+(W(:,2)-1)*xto8)=0;
B(W(:,3)+(W(:,4)-1)*xto8)=0;
UF1r=sum(B(:))+size(W,1)+sum(W(:,1)==W(:,3)&W(:,2)==W(:,4))*24;
end
function [LToe rkAd] = AGun(B,cuAd)
PUhr = sort(B(B>0),'descend');
qzl6 = size(PUhr,1);
if qzl6 < 1
LToe = [];
rkAd = 0;
return
end
fr43=PUhr(diff([0;PUhr])~=0);
LToe = zeros(nnz(fr43),3);
iwUq=histc(PUhr,fr43(end:-1:1));
LToe(:,1)=fr43;
LToe(:,2)=iwUq(end:-1:1);
rkAd=nnz(fr43);
if cuAd < 3, return, end
for hqjv = 1:rkAd
if LToe(hqjv,2) >= 2
dK4G = LToe(hqjv,1);
[Up0v XB5Y] = find(B == dK4G);
ejDG = 0;
PgCI = size(Up0v,1);
ejDG=sum(abs(diff(Up0v))+abs(diff(XB5Y)));
LToe(hqjv,3) = LToe(hqjv,2)*dK4G - 0.85 * ejDG;
end
end
end
function [W B] = pyrX(B,AjBi,cuAd)
W = [];
[LToe rkAd] = AGun(B,cuAd);
if rkAd < 1
return
end
LToe=sortrows(LToe,-cuAd);
for hqjv = 1:rkAd
if LToe(hqjv,2) >= 2
dK4G = LToe(hqjv,1);
[Up0v XB5Y] = find(B == dK4G);
PgCI = size(Up0v,1);
EA92 = PgCI*(PgCI-1)/2;
dist = zeros(EA92,3);
[gNhE RotE]=find(tril(ones(PgCI),-1));
dist(:,1)=RotE;
dist(:,2)=gNhE;
dist(:,3)=abs(XB5Y(gNhE)-XB5Y(RotE))+abs(Up0v(gNhE)-Up0v(RotE));
[ejDG HJEa] = sort(dist(:,3));
dist = dist(HJEa,:);
qzl6 = 0;
for Pzc9 = 1:EA92
if dist(Pzc9,3) > AjBi+1
break
end
egUJ = dist(Pzc9,1);
jBM7 = dist(Pzc9,2);
path = sZmT(B,[Up0v(egUJ); Up0v(jBM7)], [XB5Y(egUJ); XB5Y(jBM7)], -dK4G, AjBi, 2*dK4G);
if size(path,1) > 0
W = [W; path];
B = bKGA(B,path,-dK4G);
qzl6 = 2;
edit = [1:(egUJ-1) (egUJ+1):(jBM7-1) (jBM7+1):PgCI];
Up0v = [Up0v(egUJ); Up0v(jBM7); Up0v(edit)];
XB5Y = [XB5Y(egUJ); XB5Y(jBM7); XB5Y(edit)];
break
else
end
end
if qzl6 < 2
continue
end
for jJSe = 3:PgCI
[KKyZ tKrZ] = find(B == -dK4G);
QaUM = size(KKyZ,1);
EA92 =  QaUM * (PgCI - qzl6);
kP7T = (1:QaUM*PgCI)';
jBM7=mod(kP7T-1,PgCI)+1;
egUJ=ceil(kP7T/PgCI);
EA1s = (jBM7>qzl6);
egUJ = egUJ(EA1s);
jBM7 = jBM7(EA1s);
ejDG = abs(KKyZ(egUJ)-Up0v(jBM7)) + abs(tKrZ(egUJ)-XB5Y(jBM7));
dist = [egUJ,jBM7,ejDG];
[ejDG HJEa] = sort(dist(:,3));
dist = dist(HJEa,:);
J878 = false(PgCI,1);
EwN6 = false;
for Pzc9 = 1:EA92
if dist(Pzc9,3) > AjBi+1
break
end
jBM7 = dist(Pzc9,2);
if J878(jBM7)
randperm(4);
continue
end
egUJ = dist(Pzc9,1);
path = sZmT(B,[KKyZ(egUJ); Up0v(jBM7)], [tKrZ(egUJ); XB5Y(jBM7)], -dK4G, AjBi, dK4G);
J878(jBM7)=true;
if size(path,1) > 0
W = [W; path];
B = bKGA(B,path,-dK4G);
qzl6 = qzl6 + 1;
EwN6 = true;
Up0v([jJSe jBM7]) = Up0v([jBM7 jJSe]);
XB5Y([jJSe jBM7]) = XB5Y([jBM7 jJSe]);
break
end
end
if ~EwN6
break
end
end
end
end
end
function [W B] = J8KF(B,W,nrH7,cuAd)
[LToe rkAd] = AGun(B,cuAd);
if rkAd < 1, return, end
LToe=sortrows(LToe,-cuAd);
for hqjv = 1:rkAd
dK4G = LToe(hqjv,1);
QaUM = sum(B == -dK4G);
if QaUM == 0
if LToe(hqjv,2) >= 2
[Up0v XB5Y] = find(B == dK4G);
PgCI = size(Up0v,1);
EA92 = PgCI*(PgCI-1)*.5;
kP7T = (1:PgCI*PgCI)';
jBM7=mod(kP7T-1,PgCI)+1;
egUJ=ceil(kP7T/PgCI);
EA1s = (egUJ<jBM7);
egUJ = egUJ(EA1s);
jBM7 = jBM7(EA1s);
ejDG = abs(Up0v(egUJ)-Up0v(jBM7)) + abs(XB5Y(egUJ)-XB5Y(jBM7));
dist = [egUJ,jBM7,ejDG];
[ejDG HJEa] = sort(dist(:,3));
dist = dist(HJEa,:);
maxstep = min(nrH7,2*dK4G+1);
EwN6 = false;
for Pzc9 = 1:EA92
if dist(Pzc9,3) > maxstep+1
break
end
egUJ = dist(Pzc9,1);
jBM7 = dist(Pzc9,2);
path = sZmT(B,[Up0v(egUJ); Up0v(jBM7)], [XB5Y(egUJ); XB5Y(jBM7)], -dK4G, nrH7, 2*dK4G);
if size(path,1) > 0
W = [W; path];
B = bKGA(B,path,-dK4G);
EwN6 = true;
break
end
end
if ~EwN6
continue
end
end
end
[Up0v XB5Y] = find(B == dK4G);
zMmn = size(Up0v,1);
maxstep = min(nrH7,dK4G+1);
for jJSe = 1:zMmn
[KKyZ tKrZ] = find(B == -dK4G);
QaUM = size(KKyZ,1);
EA92 =  QaUM * (zMmn-jJSe+1);
dist = zeros(EA92,3);
Pzc9 = 0;
for egUJ = 1:QaUM
for jBM7 = jJSe:zMmn
Pzc9 = Pzc9 + 1;
dist(Pzc9,1) = egUJ;
dist(Pzc9,2) = jBM7;
dist(Pzc9,3) = abs(KKyZ(egUJ)-Up0v(jBM7)) + abs(tKrZ(egUJ)-XB5Y(jBM7));
end
end
[ejDG HJEa] = sort(dist(:,3));
dist = dist(HJEa,:);
J878 = false(zMmn,1);
EwN6 = false;
for Pzc9 = 1:EA92
if dist(Pzc9,3) > maxstep+1
break
end
jBM7 = dist(Pzc9,2);
if J878(jBM7)
randperm(4);
continue
end
egUJ = dist(Pzc9,1);
path = sZmT(B,[KKyZ(egUJ); Up0v(jBM7)], [tKrZ(egUJ); XB5Y(jBM7)], -dK4G, nrH7, 2*dK4G);
J878(jBM7)=true;
if size(path,1) > 0
W = [W; path];
B = bKGA(B,path,-dK4G);
EwN6 = true;
Up0v([jJSe jBM7]) = Up0v([jBM7 jJSe]);
XB5Y([jJSe jBM7]) = XB5Y([jBM7 jJSe]);
break
end
end
if ~EwN6
break
end
end
end
end
function [Vjf5 l8Sz] = B0lR(tOEj,B,path)
[WkQx DVPk] = size(B);
Vjf5 = tOEj == 0;
l8Sz = Vjf5;
Vjf5(:,[1 DVPk]) = false;
l8Sz([1 WkQx],:) = false;
for hqjv = 1:size(path,1)
if path(hqjv,1) == path(hqjv,3)
Vjf5(path(hqjv,1),path(hqjv,2)) = false;
Vjf5(path(hqjv,3),path(hqjv,4)) = false;
end
if path(hqjv,2) == path(hqjv,4)
l8Sz(path(hqjv,1),path(hqjv,2)) = false;
l8Sz(path(hqjv,3),path(hqjv,4)) = false;
end
end
end
function B = bKGA(B,path,enRG)
B(path(1,1),path(1,2)) = enRG;
for hqjv = 1:size(path,1);
B(path(hqjv,3),path(hqjv,4)) = enRG;
end
end
function path = v4Rg(yl03,HaxX,WkQx,n8_D)
path = zeros(n8_D,4);
nQQz = mod(yl03,WkQx);
zNEk = ceil(yl03/WkQx);
for jJSe = 1:n8_D
path(jJSe,1:2) = [nQQz zNEk];
yl03 = HaxX(yl03);
nQQz = mod(yl03,WkQx);
zNEk = ceil(yl03/WkQx);
path(jJSe,3:4) = [nQQz zNEk];
end
end
function path = sZmT(B,Up0v,XB5Y,enRG,AjBi,SQWY)
[WkQx DVPk] = size(B);
HaxX = zeros(WkQx,DVPk);
T88Y = -ones(WkQx,DVPk);
T88Y(Up0v(2),XB5Y(2)) = 0;
T88Y(Up0v(1),XB5Y(1)) = -2;
T88Y( B == enRG ) = -2;
gHvW = zeros(WkQx*DVPk,1);
gHvW(1) = Up0v(2) + (XB5Y(2)-1)*WkQx;
count = 1;
c6IE = [-1 1 -WkQx WkQx];
iJZ6 = randperm(4);
for step = 0:min(AjBi,SQWY)
if count < 1, break, end
PgCI = count;
yl03 = gHvW;
count = 0;
for hqjv = 1:PgCI
A0S_ = yl03(hqjv);
for DH9Z=1:4
EXtq = A0S_ + c6IE(iJZ6(DH9Z));
jDl3 = T88Y(EXtq);
if jDl3 == -2
HaxX(EXtq) = A0S_;
path = v4Rg(EXtq,HaxX,WkQx,step+1);
return
end
if jDl3 == -1 && B(EXtq) == 0
T88Y(EXtq) = step+1;
HaxX(EXtq) = A0S_;
count = count + 1;
gHvW(count) = EXtq;
end
end
end
end
path = [];
end
function path = BF44(B,Vjf5,l8Sz,Up0v,XB5Y,enRG,rxS5,nrH7,SQWY)
[WkQx DVPk] = size(B);
TS2U = false(WkQx,DVPk);
HaxX = zeros(WkQx,DVPk);
T88Y = -ones(WkQx,DVPk);
T88Y(Up0v(1),XB5Y(1)) = -2;
T88Y( B == enRG ) = -2;
maxstep = min((rxS5*27)+nrH7,SQWY+1);
u1px = zeros(maxstep+28,1);
u1px(1) = Up0v(2) + (XB5Y(2)-1)*WkQx;
c6IE = [-WkQx WkQx -1 1];
for step = 1:maxstep
while u1px(step)>0
A0S_ = u1px(step);
u1px(step)=T88Y(A0S_);
for DH9Z = 1:4
EXtq = A0S_ + c6IE(DH9Z);
jDl3 = T88Y(EXtq);
if jDl3==-1
if B(EXtq) == 0
T88Y(EXtq) = u1px(step+1);
u1px(step+1) = EXtq;
HaxX(EXtq) = A0S_;
elseif (Vjf5(EXtq)&&(DH9Z<3)) || (l8Sz(EXtq)&&(DH9Z>2))
T88Y(EXtq) = u1px(step+26);
u1px(step+26) = EXtq;
HaxX(EXtq) = A0S_;
TS2U(EXtq) = true;
end
end
if jDl3==-2
step=step+1;
HaxX(EXtq) = A0S_;
nQQz=mod(EXtq,WkQx);
zNEk=ceil(EXtq/WkQx);
path = zeros(step,4);
jJSe = 0;
while nQQz ~= Up0v(2) || zNEk ~= XB5Y(2)
jJSe = jJSe + 1;
path(jJSe,1:2) = [nQQz zNEk];
EXtq = nQQz + (zNEk-1)*WkQx;
Ng4p = HaxX(EXtq);
FDwg=mod(Ng4p,WkQx);
ObPv=ceil(Ng4p/WkQx);
path(jJSe,3:4) = [FDwg ObPv];
nQQz = FDwg;
zNEk = ObPv;
if TS2U(nQQz,zNEk)
jJSe = jJSe + 1;
path(jJSe,:) = [nQQz zNEk nQQz zNEk];
end
end
path = path(1:jJSe,:);
return
end
end
end
end
path = [];
end
function W = iwrt(B)
[W,jfVC] = QxqZ(B);
NMuH = 0;
s_OY = round(mod(B(:),2));
if jfVC < 2100
return
end
[AjHE,HIEm] = size(B);
B = flipud(fliplr(B'));
[oTLZ,ArSQ] = QxqZ(B);
if jfVC > ArSQ
W = [AjHE-oTLZ(:,2)+1 HIEm-oTLZ(:,1)+1 AjHE-oTLZ(:,4)+1 HIEm-oTLZ(:,3)+1];
end
if s_OY~=NMuH;        W = zeros(0,4);    end
end
function [W,jfVC] = QxqZ(B)
[xto8,nFG2]=size(B);
ZNk9=nan(xto8+2,nFG2+2);
ZNk9(2:end-1,2:end-1)=B;
ZbMU = ZNk9;
rxS5 = 4;
if size(ZbMU,2) > 20
bvsR = 4;
S45c = 8;
AjBi = 12;
else
bvsR = 3;
S45c = 7;
AjBi = 11;
end
jfVC = inf;
v8Rq = [1 2;2 1];
Ba3k = [1 3;3 1];
cxMk = [3 2 1;1 2 3];
for Pzc9 = 1:2
if Pzc9 == 2
[XOBR KxG9] = EWyI(ZbMU,bvsR,v8Rq(Pzc9,:));
[lTdF HOmV] = Ahv8(KxG9,XOBR,S45c,Ba3k(Pzc9,:));
[oGPG criT] = Ahv8(HOmV,lTdF,AjBi,Ba3k(Pzc9,:));
else
[XOBR KxG9] = EWyI(ZbMU,4,v8Rq(Pzc9,:));
[oGPG criT] = Ahv8(KxG9,XOBR,11,Ba3k(Pzc9,:));
end
for yZjX = 1:2
if Pzc9 == 2 && yZjX == 2 && jfVC > 2100, return, end
duQL = t7KN(ZbMU,criT,oGPG,rxS5,AjBi,cxMk(yZjX,:))-1;
GcCJ = lWpu(B,duQL);
if GcCJ <= jfVC
jfVC = GcCJ;
W = duQL;
rxS5 = rxS5 - 1;
end
end
end
if xto8*nFG2 > 290; return; end
vTAH = sum(W(:,1)==W(:,3)&W(:,2)==W(:,4));
if vTAH <= 4
KN7H = JPz7(B);
GTnC = lWpu(B,KN7H);
if GTnC < jfVC
W = KN7H;
jfVC = GTnC;
end
end
end
function path = XWuN(B,Up0v,XB5Y,enRG,AjBi,SQWY)
function path = U1te(ZPxK,J6Nx,wMNN)
eufI(ZPxK,J6Nx) = lOHQ(hqjv);
V9aa(ZPxK,J6Nx) = m3Ng(hqjv);
path = zeros(wMNN,4);
for Xxdz = 1:wMNN
path(Xxdz,1:2) = [ZPxK J6Nx];
ka33 = eufI(ZPxK,J6Nx);
d0qO = V9aa(ZPxK,J6Nx);
path(Xxdz,3:4) = [ka33 d0qO];
ZPxK = ka33;
J6Nx = d0qO;
end
end
[WkQx DVPk] = size(B);
eufI = zeros(WkQx,DVPk);
V9aa = zeros(WkQx,DVPk);
T88Y = -ones(WkQx,DVPk);
T88Y(Up0v(2),XB5Y(2)) = 0;
T88Y(Up0v(1),XB5Y(1)) = -2;
T88Y( B == enRG ) = -2;
e6Ic = zeros(WkQx*DVPk,1);
Gf_x = zeros(WkQx*DVPk,1);
count = 1;
e6Ic(1) = Up0v(2);
Gf_x(1) = XB5Y(2);
uzRL=[-1 1 0 0];
G87r=[0 0 -1 1];
for step = 0:min(AjBi,SQWY)
if count < 1, break, end
PgCI = count;
lOHQ = e6Ic(1:PgCI);
m3Ng = Gf_x(1:PgCI);
count = 0;
for hqjv = 1:PgCI
IWl8 = m3Ng(hqjv);
A0S_ = lOHQ(hqjv);
for DH9Z=1:4
ZPxK = A0S_ + uzRL(DH9Z);
J6Nx = IWl8 + G87r(DH9Z);
EXtq = ZPxK + (J6Nx-1)*WkQx;
jDl3 = T88Y(EXtq);
if jDl3 == -2
path = U1te(ZPxK,J6Nx,step+1);
return
elseif jDl3 == -1 && B(EXtq) == 0
T88Y(EXtq) = step+1;
eufI(EXtq) = A0S_;
V9aa(EXtq) = IWl8;
count = count + 1; e6Ic(count) = ZPxK; Gf_x(count) = J6Nx;
end
end
end
end
path = [];
end
function wf_J = JPz7(jBM7)
dK4G = unique(jBM7);
dK4G(1) = [];
tlJD = zeros(size(dK4G));
for hqjv = 1:length(tlJD)
tlJD(hqjv) = nnz(dK4G(hqjv) == jBM7(:));
end
for hqjv = 1:length(tlJD)
if tlJD(hqjv) == 1
jBM7(dK4G(hqjv) == jBM7(:)) = -1;
end
end
g_Ya = zeros(size(jBM7)+2);
FYyb = repmat(-1,size(g_Ya));
FYyb(2:end-1,2:end-1) = jBM7;
wf_J = [];
[Vra8, sda2] = find(FYyb>0);
ejDG = (size(FYyb,1)/2 - Vra8).^2 + (size(FYyb,2)/2 - sda2).^2;
[ejDG, order] = sort(ejDG);
order = order';
for rkAd = 1:length(Vra8)-1
h0Vk = 0;
Z0r_ = 32;
for hqjv = order
if g_Ya(Vra8(hqjv), sda2(hqjv))
continue
end
[UF1r, lw9v, XrxT] = nOr1(FYyb, g_Ya, Vra8(hqjv), sda2(hqjv), Z0r_);
if UF1r > h0Vk
h0Vk = UF1r;
spPa = lw9v;
Z0r_ = XrxT;
if Z0r_ == 1
break
end
end
end
if h0Vk == 0
wf_J = wf_J - 1;
return
end
g_Ya = bKGA(g_Ya, spPa, FYyb(spPa(1,1), spPa(1,2)));
FYyb = bKGA(FYyb, spPa, FYyb(spPa(1,1), spPa(1,2)));
wf_J = [wf_J; spPa];
end
wf_J = wf_J - 1;
end
function [h0Vk, spPa, Z0r_] = nOr1(jBM7, g_Ya, yl03, m3Ng, Xf_Z)
h0Vk = 0;
spPa = [];
Xxdz = [1 -1 0 0];
rkAd = [0 0 1 -1];
if ~any(g_Ya(:)==jBM7(yl03,m3Ng))
g_Ya = jBM7;
end
FYyb = jBM7;
FYyb(FYyb>0) = -1;
FYyb(yl03,m3Ng) = 1;
Z0r_ = Inf;
dK4G = jBM7(yl03,m3Ng);
for hqjv = 1:Xf_Z-2
[Vra8, sda2] = find(FYyb==hqjv);
for tlJD = 1:length(Vra8)
for hKrI = 1:4
ySSV = Vra8(tlJD) + Xxdz(hKrI);
iHpX = sda2(tlJD) + rkAd(hKrI);
if g_Ya(ySSV,iHpX) == dK4G && ~(ySSV == yl03 && iHpX == m3Ng)
Z0r_ = hqjv;
break
end
Tc4f = FYyb(ySSV,iHpX);
if Tc4f == 0
FYyb(ySSV,iHpX) = hqjv+1;
end
end
if Z0r_ < Inf
break
end
end
if Z0r_ < Inf
break
end
end
if Z0r_ == Inf
return
end
h0Vk = jBM7(yl03,m3Ng) - Z0r_;
if Z0r_ == 1
spPa = [yl03, m3Ng, ySSV, iHpX];
return
end
spPa = zeros(Z0r_,4);
for step = Z0r_:-1:1
for hKrI = 1:4
FYKl = ySSV + Xxdz(hKrI);
UI2K = iHpX + rkAd(hKrI);
if FYyb(FYKl, UI2K) == step
break
end
end
spPa(step,:) = [FYKl, UI2K, ySSV, iHpX];
ySSV = FYKl;
iHpX = UI2K;
end
end
function [W B] = EWyI(B,AjBi,cuAd)
W = [];
[LToe rkAd] = AGun(B,cuAd);
if rkAd < 1
return
end
LToe=sortrows(LToe,-cuAd);
for hqjv = 1:rkAd
if LToe(hqjv,2) >= 2
dK4G = LToe(hqjv,1);
[Up0v XB5Y] = find(B == dK4G);
PgCI = size(Up0v,1);
EA92 = PgCI*(PgCI-1)/2;
dist = zeros(EA92,3);
Pzc9 = 0;
for egUJ = 1:PgCI
for jBM7 = (egUJ+1):PgCI
Pzc9 = Pzc9 + 1;
dist(Pzc9,1) = egUJ;
dist(Pzc9,2) = jBM7;
dist(Pzc9,3) = abs(Up0v(egUJ)-Up0v(jBM7)) + abs(XB5Y(egUJ)-XB5Y(jBM7));
end
end
[ejDG HJEa] = sort(dist(:,3));
dist = dist(HJEa,:);
UOlp = reshape(dist(:,1:2)',[],1);
qzl6 = 0;
Bifg = 1;
uMxV = false(PgCI,1);
for hqjv=1:PgCI
X0n0 = find( ~uMxV(UOlp(Bifg:end)) , 1 , 'first');
if isempty(X0n0)
break
end
egUJ = UOlp(X0n0);
Distance = abs(Up0v([1:egUJ-1,egUJ+1:end]')-Up0v(egUJ)) + abs(XB5Y([1:egUJ-1,egUJ+1:end]')-XB5Y(egUJ));
if max(Distance)>AjBi-1
break
end
path = MiBc(B,Up0v(egUJ),XB5Y(egUJ),Up0v([1:egUJ-1,egUJ+1:end]'),XB5Y([1:egUJ-1,egUJ+1:end]'), -dK4G, AjBi, 2*dK4G);
if size(path,1) > 0
W = [W; path];
B = bKGA(B,path,-dK4G);
qzl6 = 2;
break
end
end
if qzl6 < 2
continue
end
for Xxdz = 3:PgCI
[KKyZ tKrZ] = find(B == -dK4G);
[Up0v XB5Y] = find(B == dK4G);
[wGk4,nd3O] = meshgrid(Up0v,KKyZ);
[AE4f,uRrr] = meshgrid(Up0v,KKyZ);
Distance = abs(wGk4-nd3O) + abs(AE4f-uRrr);
if max(Distance(:))>AjBi-1
break
end
path = MiBc(B,KKyZ,tKrZ,Up0v,XB5Y, -dK4G, AjBi, 2*dK4G);
if size(path,1) > 0
W = [W; path];
B = bKGA(B,path,-dK4G);
EwN6 = true;
else
break
end
end
end
end
end
function [W B] = Ahv8(B,W,xZHE,cuAd)
[LToe rkAd] = AGun(B,cuAd);
if rkAd < 1, return, end
LToe=sortrows(LToe,-cuAd);
for hqjv = 1:rkAd
dK4G = LToe(hqjv,1);
QaUM = sum(B == -dK4G);
if QaUM == 0
if LToe(hqjv,2) >= 2
[Up0v XB5Y] = find(B == dK4G);
PgCI = size(Up0v,1);
EA92 = PgCI*(PgCI-1)/2;
dist = zeros(EA92,3);
Pzc9 = 0;
for egUJ = 1:PgCI
for jBM7 = (egUJ+1):PgCI
Pzc9 = Pzc9 + 1;
dist(Pzc9,1) = egUJ;
dist(Pzc9,2) = jBM7;
dist(Pzc9,3) = abs(Up0v(egUJ)-Up0v(jBM7)) + abs(XB5Y(egUJ)-XB5Y(jBM7));
end
end
[ejDG HJEa] = sort(dist(:,3));
dist = dist(HJEa,:);
maxstep = min(xZHE,2*dK4G+1);
EwN6 = false;
for Pzc9 = 1:EA92
if dist(Pzc9,3) > maxstep+1
break
end
egUJ = dist(Pzc9,1);
jBM7 = dist(Pzc9,2);
path = XWuN(B,[Up0v(egUJ); Up0v(jBM7)], [XB5Y(egUJ); XB5Y(jBM7)], -dK4G, xZHE, 2*dK4G);
if size(path,1) > 0
W = [W; path];
B = bKGA(B,path,-dK4G);
EwN6 = true;
break
end
end
if ~EwN6
continue
end
end
end
[Up0v XB5Y] = find(B == dK4G);
MmOT = size(Up0v,1);
maxstep = min(xZHE,dK4G+1);
for Xxdz = 1:MmOT
[KKyZ tKrZ] = find(B == -dK4G);
[Up0v XB5Y] = find(B == dK4G);
EwN6 = false;
path = MiBc(B,KKyZ,tKrZ,Up0v,XB5Y, -dK4G, xZHE, dK4G);
if size(path,1) > 0
W = [W; path];
B = bKGA(B,path,-dK4G);
EwN6 = true;
end
if ~EwN6
break
end
end
end
end
function [W B] = t7KN(ZNk9,B,W,rxS5,xZHE,cuAd)
function eQCA()
for wf_J = 1:size(path,1);
if path(wf_J,1) == path(wf_J,3)
jnEl(path(wf_J,1),path(wf_J,2)) = false;
jnEl(path(wf_J,3),path(wf_J,4)) = false;
if path(wf_J,2) == path(wf_J,4)
B(path(wf_J,1),path(wf_J,2)) = -9999;
end
end
if path(wf_J,2) == path(wf_J,4)
O2Lh(path(wf_J,1),path(wf_J,2)) = false;
O2Lh(path(wf_J,3),path(wf_J,4)) = false;
end
end
end
[jnEl O2Lh] = B0lR(ZNk9,B,W);
[LToe rkAd] = AGun(B,cuAd);
if rkAd < 1, return, end
LToe=sortrows(LToe,-cuAd);
for hqjv = 1:rkAd
dK4G = LToe(hqjv,1);
QaUM = sum(B == -dK4G);
if QaUM == 0
if LToe(hqjv,2) >= 2
[Up0v XB5Y] = find(B == dK4G);
PgCI = size(Up0v,1);
EA92 = PgCI*(PgCI-1)/2;
dist = zeros(EA92,3);
Pzc9 = 0;
for egUJ = 1:PgCI
for jBM7 = (egUJ+1):PgCI
Pzc9 = Pzc9 + 1;
dist(Pzc9,1) = egUJ;
dist(Pzc9,2) = jBM7;
dist(Pzc9,3) = abs(Up0v(egUJ)-Up0v(jBM7)) + abs(XB5Y(egUJ)-XB5Y(jBM7));
end
end
[ejDG HJEa] = sort(dist(:,3));
dist = dist(HJEa,:);
maxstep = min((rxS5*25)+xZHE,2*dK4G+1);
EwN6 = false;
for Pzc9 = 1:EA92
if dist(Pzc9,3) > maxstep+1
break
end
egUJ = dist(Pzc9,1);
jBM7 = dist(Pzc9,2);
path = BF44(B,jnEl,O2Lh,[Up0v(egUJ); Up0v(jBM7)], [XB5Y(egUJ); XB5Y(jBM7)], -dK4G, rxS5, xZHE, 2*dK4G);
if size(path,1) > 0
W = [W; path];
B = bKGA(B,path,-dK4G);
eQCA();
EwN6 = true;
break
end
end
if ~EwN6
continue
end
end
end
[Up0v XB5Y] = find(B == dK4G);
MmOT = size(Up0v,1);
maxstep = min((rxS5*25)+xZHE,dK4G+1);
for Xxdz = 1:MmOT
[KKyZ tKrZ] = find(B == -dK4G);
[Up0v XB5Y] = find(B == dK4G);
EwN6 = false;
path = Bb5P(B,jnEl,O2Lh,KKyZ,tKrZ,Up0v,XB5Y, -dK4G, rxS5, xZHE, dK4G);
if size(path,1) > 0
W = [W; path];
B = bKGA(B,path,-dK4G);
eQCA();
EwN6 = true;
end
if ~EwN6
break
end
end
end
end
function path = Bb5P(B,Vjf5,l8Sz,rowS,colS,fvIo,uBcH,enRG,rxS5,nrH7,SQWY)
function path = v4Rg(EXtq,step)
HaxX(EXtq) = A0S_;
path = zeros(step,4);
jJSe = 0;
JQ3P = 0;
e1sb = zeros(step,1);
zkpE = zeros(step,1);
zvrX = zeros(step,1);
while isempty(find(COKQ==EXtq,1))
jJSe = jJSe + 1;
e1sb(jJSe,1) = EXtq;
Ng4p = HaxX(EXtq);
zkpE(jJSe,1) = Ng4p;
EXtq = Ng4p;
if TS2U(EXtq)
JQ3P = JQ3P + 1;
zvrX(JQ3P,1) = EXtq;
end
end
e1sb = [ e1sb(1:jJSe,:) ; zvrX(1:JQ3P,1) ];
zkpE = [ zkpE(1:jJSe,:) ; zvrX(1:JQ3P,1) ];
path = [ mod(e1sb,WkQx) , ceil(e1sb/WkQx) ,  mod(zkpE,WkQx) , ceil(zkpE/WkQx) ];
end
[WkQx DVPk] = size(B);
TS2U = false(WkQx,DVPk);
HaxX = zeros(WkQx,DVPk);
T88Y = -ones(WkQx,DVPk);
COKQ = rowS + (colS-1)*WkQx;
T88Y(COKQ) = 0;
T88Y(fvIo + (uBcH-1)*WkQx) = -2;
maxstep = min((rxS5*25)+nrH7,SQWY+1);
Vpt9 = zeros(maxstep+26,1);
GPVY = [-1 1];
for step = 0:maxstep
if step == 0
yl03 = COKQ;
elseif Vpt9(step) == 0
continue
else
yl03 = find(T88Y == step);
end
PgCI = numel(yl03);
for hqjv = 1:PgCI
A0S_ = yl03(hqjv);
for ybkr = 1:2
EXtq = A0S_ + GPVY(ybkr) * WkQx;
jDl3 = T88Y(EXtq);
if jDl3 == -2
path = v4Rg(EXtq,step+1);
return
elseif jDl3 == -1
if B(EXtq) == 0
T88Y(EXtq) = step+1; Vpt9(step+1) = 1;
HaxX(EXtq) = A0S_;
elseif Vjf5(EXtq)
T88Y(EXtq) = step+26; Vpt9(step+26) = 1;
HaxX(EXtq) = A0S_;
TS2U(EXtq) = true;
end
end
end
for ybkr = 1:2
EXtq = A0S_ + GPVY(ybkr);
jDl3 = T88Y(EXtq);
if jDl3 == -2
path = v4Rg(EXtq,step+1);
return
elseif jDl3 == -1
if B(EXtq) == 0
T88Y(EXtq) = step+1; Vpt9(step+1) = 1;
HaxX(EXtq) = A0S_;
elseif l8Sz(EXtq)
T88Y(EXtq) = step+26; Vpt9(step+26) = 1;
HaxX(EXtq) = A0S_;
TS2U(EXtq) = true;
end
end
end
end
end
path = zeros(0,4);
end
function path = MiBc(B,rowS,colS,sEUJ,dy0z,enRG,AjBi,SQWY)
[WkQx DVPk] = size(B);
eufI = zeros(WkQx,DVPk);
V9aa = zeros(WkQx,DVPk);
T88Y = -ones(WkQx,DVPk);
T88Y(rowS+(colS-1)*WkQx) = 0;
T88Y(sEUJ+(dy0z-1)*WkQx) = -2;
gHvW = zeros(WkQx*DVPk,1);
Gf_x = zeros(WkQx*DVPk,1);
count = numel(rowS);
gHvW(1:count) = rowS;
Gf_x(1:count) = colS;
uzRL=[-1 1 0 0];
G87r=[0 0 -1 1];
for step = 0:min(AjBi,SQWY)
if count < 1, break, end
PgCI = count;
lOHQ = gHvW(1:PgCI);
m3Ng = Gf_x(1:PgCI);
count = 0;
for hqjv = 1:PgCI
IWl8 = m3Ng(hqjv);
A0S_ = lOHQ(hqjv);
for DH9Z=1:4
ZPxK = A0S_ + uzRL(DH9Z);
J6Nx = IWl8 + G87r(DH9Z);
EXtq = ZPxK + (J6Nx-1)*WkQx;
jDl3 = T88Y(EXtq);
if jDl3 == -2
wMNN=step+1;
eufI(ZPxK,J6Nx) = lOHQ(hqjv);
V9aa(ZPxK,J6Nx) = m3Ng(hqjv);
path = zeros(wMNN,4);
for Xxdz = 1:wMNN
path(Xxdz,1:2) = [ZPxK J6Nx];
ka33 = eufI(ZPxK,J6Nx);
d0qO = V9aa(ZPxK,J6Nx);
path(Xxdz,3:4) = [ka33 d0qO];
ZPxK = ka33;
J6Nx = d0qO;
end
return
end
if jDl3 == -1 && B(EXtq) == 0
T88Y(EXtq) = step+1;
eufI(EXtq) = A0S_;
V9aa(EXtq) = IWl8;
count = count + 1; gHvW(count) = ZPxK; Gf_x(count) = J6Nx;
end
end
end
end
path = [];
end