ID:49809
Title:Marco Tullio 203
Author:Fabio Carnevale
Date:2008-05-07 11:59:49
Score:13430.5595
Result:133963.00 (cyc: 16, node: 6610)
CPU Time:35.7276
Status:Passed
Comments:
Based on:none
Code:
function W = solv(B)
iJbG=930;
MyeZ = rand(43,1);
W=AjCh(B);
zrBg = sWBq(B,W);
[BJKZ,JBnL] = size(B);
byD4 = B(BJKZ:-1:1,:);
byD4 = byD4.';
[g9z7,NIno] = PtRS(byD4,[1 2],[1 2],4*BJKZ*JBnL);
if zrBg > NIno
W = [BJKZ-g9z7(:,2)+1 g9z7(:,1) BJKZ-g9z7(:,4)+1 g9z7(:,3)];
zrBg=NIno;
end
ty4m=rand('state');
rand(iJbG,1);
if zrBg>1000 && rand<.5
[g9z7,NIno] = PtRS(byD4,[1 2],[1 2],4*BJKZ*JBnL);
if zrBg > NIno
W = [BJKZ-g9z7(:,2)+1 g9z7(:,1) BJKZ-g9z7(:,4)+1 g9z7(:,3)];
zrBg=NIno;
end
end
if zrBg>1000 && rand<.5
[g9z7,NIno] = PtRS(byD4,[1 2],[1 2],4*BJKZ*JBnL);
if zrBg > NIno
W = [BJKZ-g9z7(:,2)+1 g9z7(:,1) BJKZ-g9z7(:,4)+1 g9z7(:,3)];
zrBg=NIno;
end
end
rand('state',ty4m);
end
function [W,zrBg] = PtRS(eaME,ym20,Bc2e,XyRJ)
[u_M3,kdio]=size(eaME);
vGK5= -ones(u_M3+2,kdio+2);
vGK5(2:end-1,2:end-1)=eaME;
iuqe = vGK5;
D2D2 = 4;
if size(iuqe,2) > 20
xhov = 4;
l7QH = 8;
kyt3 = 18;
else
xhov = 3;
l7QH = 7;
kyt3 = 13;
end
zrBg = inf;
EFmF = [1 2;2 1];
EQCy = [1 3;3 1];
ML3k = [3 2 1;1 2 3];
for zFQ0 = ym20
if zFQ0 == 2
[vv5B uTcO] = i_5E(iuqe,xhov,EFmF(zFQ0,:));
[kPZx hcfx] = wypw(uTcO,vv5B,l7QH,EQCy(zFQ0,:));
[WEMP ogZP] = wypw(hcfx,kPZx,kyt3,EQCy(zFQ0,:));
else
[vv5B uTcO] = i_5E(iuqe,4,EFmF(zFQ0,:));
[WEMP ogZP] = wypw(uTcO,vv5B,11,EQCy(zFQ0,:));
end
for aRMM = Bc2e
H9zg = mzc4(iuqe,ogZP,WEMP,D2D2,kyt3,ML3k(aRMM,:))-1;
RZYU = sWBq(eaME,H9zg);
if RZYU <= zrBg
zrBg = RZYU;
W = H9zg;
D2D2 = D2D2 - 1;
end
end
end
end
function UF7G = sWBq(B,W)
u_M3=size(B,1);
B(W(:,1)+(W(:,2)-1)*u_M3)=0;
B(W(:,3)+(W(:,4)-1)*u_M3)=0;
UF7G=sum(B(:))+size(W,1)+sum(W(:,1)==W(:,3)&W(:,2)==W(:,4))*24;
end
function [MCMj Laci] = Hl5x(B,jI4K)
qfYs = sort(B(B>0),'descend');
lj32 = size(qfYs,1);
if lj32 < 1
MCMj = [];
Laci = 0;
return
end
a4TQ=qfYs(diff([0;qfYs])~=0);
MCMj = zeros(nnz(a4TQ),3);
aleC=histc(qfYs,a4TQ(end:-1:1));
MCMj(:,1)=a4TQ;
MCMj(:,2)=aleC(end:-1:1);
Laci=nnz(a4TQ);
if jI4K < 3, return, end
for b1Bp = 1:Laci
if MCMj(b1Bp,2) >= 2
HZSI = MCMj(b1Bp,1);
[iXlB z5yZ] = find(B == HZSI);
muIs = 0;
xjb7 = size(iXlB,1);
muIs=sum(abs(diff(iXlB))+abs(diff(z5yZ)));
MCMj(b1Bp,3) = MCMj(b1Bp,2)*HZSI - 0.85 * muIs;
end
end
end
function [W B] = i_5E(B,kyt3,jI4K)
W = [];
[MCMj Laci] = Hl5x(B,jI4K);
if Laci < 1
return
end
MCMj=sortrows(MCMj,-jI4K);
for b1Bp = 1:Laci
if MCMj(b1Bp,2) >= 2
HZSI = MCMj(b1Bp,1);
[iXlB z5yZ] = find(B == HZSI);
xjb7 = size(iXlB,1);
WuLp = xjb7*(xjb7-1)/2;
dist = zeros(WuLp,3);
[lVrj C3gp]=find(tril(ones(xjb7),-1));
dist(:,1)=C3gp;
dist(:,2)=lVrj;
dist(:,3)=abs(z5yZ(lVrj)-z5yZ(C3gp))+abs(iXlB(lVrj)-iXlB(C3gp));
[muIs NjO8] = sort(dist(:,3));
dist = dist(NjO8,:);
lj32 = 0;
for zFQ0 = 1:WuLp
if dist(zFQ0,3) > kyt3+1
break
end
gfrl = dist(zFQ0,1);
ruhh = dist(zFQ0,2);
path = N_Hv(B,[iXlB(gfrl); iXlB(ruhh)], [z5yZ(gfrl); z5yZ(ruhh)], -HZSI, kyt3, 2*HZSI);
if size(path,1) > 0
W = [W; path];
B = kswu(B,path,-HZSI);
lj32 = 2;
edit = [1:(gfrl-1) (gfrl+1):(ruhh-1) (ruhh+1):xjb7];
iXlB = [iXlB(gfrl); iXlB(ruhh); iXlB(edit)];
z5yZ = [z5yZ(gfrl); z5yZ(ruhh); z5yZ(edit)];
break
else
end
end
if lj32 < 2
continue
end
for YD_A = 3:xjb7
[XJ2M PrCD] = find(B == -HZSI);
TNjV = size(XJ2M,1);
WuLp =  TNjV * (xjb7 - lj32);
OcvV = (1:TNjV*xjb7)';
ruhh=mod(OcvV-1,xjb7)+1;
gfrl=ceil(OcvV/xjb7);
PQy2 = (ruhh>lj32);
gfrl = gfrl(PQy2);
ruhh = ruhh(PQy2);
muIs = abs(XJ2M(gfrl)-iXlB(ruhh)) + abs(PrCD(gfrl)-z5yZ(ruhh));
dist = [gfrl,ruhh,muIs];
[muIs NjO8] = sort(dist(:,3));
dist = dist(NjO8,:);
Waw0 = false(xjb7,1);
OskB = false;
for zFQ0 = 1:WuLp
if dist(zFQ0,3) > kyt3+1
break
end
ruhh = dist(zFQ0,2);
if Waw0(ruhh)
randperm(4);
continue
end
gfrl = dist(zFQ0,1);
path = N_Hv(B,[XJ2M(gfrl); iXlB(ruhh)], [PrCD(gfrl); z5yZ(ruhh)], -HZSI, kyt3, HZSI);
Waw0(ruhh)=true;
if size(path,1) > 0
W = [W; path];
B = kswu(B,path,-HZSI);
lj32 = lj32 + 1;
OskB = true;
iXlB([YD_A ruhh]) = iXlB([ruhh YD_A]);
z5yZ([YD_A ruhh]) = z5yZ([ruhh YD_A]);
break
end
end
if ~OskB
break
end
end
end
end
end
function [W B] = wypw(B,W,TYEb,jI4K)
[MCMj Laci] = Hl5x(B,jI4K);
if Laci < 1, return, end
MCMj=sortrows(MCMj,-jI4K);
for b1Bp = 1:Laci
HZSI = MCMj(b1Bp,1);
TNjV = sum(B == -HZSI);
if TNjV == 0
if MCMj(b1Bp,2) >= 2
[iXlB z5yZ] = find(B == HZSI);
xjb7 = size(iXlB,1);
WuLp = xjb7*(xjb7-1)*.5;
OcvV = (1:xjb7*xjb7)';
ruhh=mod(OcvV-1,xjb7)+1;
gfrl=ceil(OcvV/xjb7);
PQy2 = (gfrl<ruhh);
gfrl = gfrl(PQy2);
ruhh = ruhh(PQy2);
muIs = abs(iXlB(gfrl)-iXlB(ruhh)) + abs(z5yZ(gfrl)-z5yZ(ruhh));
dist = [gfrl,ruhh,muIs];
[muIs NjO8] = sort(dist(:,3));
dist = dist(NjO8,:);
maxstep = min(TYEb,2*HZSI+1);
OskB = false;
for zFQ0 = 1:WuLp
if dist(zFQ0,3) > maxstep+1
break
end
gfrl = dist(zFQ0,1);
ruhh = dist(zFQ0,2);
path = N_Hv(B,[iXlB(gfrl); iXlB(ruhh)], [z5yZ(gfrl); z5yZ(ruhh)], -HZSI, TYEb, 2*HZSI);
if size(path,1) > 0
W = [W; path];
B = kswu(B,path,-HZSI);
OskB = true;
break
end
end
if ~OskB
continue
end
end
end
[iXlB z5yZ] = find(B == HZSI);
zK4h = size(iXlB,1);
maxstep = min(TYEb,HZSI+1);
for YD_A = 1:zK4h
[XJ2M PrCD] = find(B == -HZSI);
TNjV = size(XJ2M,1);
WuLp =  TNjV * (zK4h-YD_A+1);
dist = zeros(WuLp,3);
zFQ0 = 0;
OcvV = (1:TNjV*zK4h)';
ruhh=mod(OcvV-1,zK4h)+1;
gfrl=ceil(OcvV/zK4h);
PQy2 = (ruhh>=YD_A);
gfrl = gfrl(PQy2);
ruhh = ruhh(PQy2);
muIs = abs(XJ2M(gfrl)-iXlB(ruhh)) + abs(PrCD(gfrl)-z5yZ(ruhh));
dist = [gfrl,ruhh,muIs];
[muIs NjO8] = sort(dist(:,3));
dist = dist(NjO8,:);
Waw0 = false(zK4h,1);
OskB = false;
for zFQ0 = 1:WuLp
if dist(zFQ0,3) > maxstep+1
break
end
ruhh = dist(zFQ0,2);
if Waw0(ruhh)
randperm(4);
continue
end
gfrl = dist(zFQ0,1);
path = N_Hv(B,[XJ2M(gfrl); iXlB(ruhh)], [PrCD(gfrl); z5yZ(ruhh)], -HZSI, TYEb, 2*HZSI);
Waw0(ruhh)=true;
if size(path,1) > 0
W = [W; path];
B = kswu(B,path,-HZSI);
OskB = true;
iXlB([YD_A ruhh]) = iXlB([ruhh YD_A]);
z5yZ([YD_A ruhh]) = z5yZ([ruhh YD_A]);
break
end
end
if ~OskB
break
end
end
end
end
function [H1W2 NfgO] = btYB(vGK5,B,path)
[BvK7 Zyuv] = size(B);
H1W2 = vGK5 == 0;
NfgO = H1W2;
H1W2(:,[1 Zyuv]) = false;
NfgO([1 BvK7],:) = false;
for b1Bp = 1:size(path,1)
if path(b1Bp,1) == path(b1Bp,3)
H1W2(path(b1Bp,1),path(b1Bp,2)) = false;
H1W2(path(b1Bp,3),path(b1Bp,4)) = false;
end
if path(b1Bp,2) == path(b1Bp,4)
NfgO(path(b1Bp,1),path(b1Bp,2)) = false;
NfgO(path(b1Bp,3),path(b1Bp,4)) = false;
end
end
end
function B = kswu(B,path,F9Bt)
B(path(1,1),path(1,2)) = F9Bt;
for b1Bp = 1:size(path,1);
B(path(b1Bp,3),path(b1Bp,4)) = F9Bt;
end
end
function path = WW7m(KZF3,jOGJ,BvK7,mtAh)
path = zeros(mtAh,4);
xDKX = mod(KZF3,BvK7);
QyZc = ceil(KZF3/BvK7);
for YD_A = 1:mtAh
path(YD_A,1:2) = [xDKX QyZc];
KZF3 = jOGJ(KZF3);
xDKX = mod(KZF3,BvK7);
QyZc = ceil(KZF3/BvK7);
path(YD_A,3:4) = [xDKX QyZc];
end
end
function path = N_Hv(B,iXlB,z5yZ,F9Bt,kyt3,QBTZ)
[BvK7 Zyuv] = size(B);
jOGJ = zeros(BvK7,Zyuv);
zk9c = -ones(BvK7,Zyuv);
zk9c(iXlB(2),z5yZ(2)) = 0;
zk9c(iXlB(1),z5yZ(1)) = -2;
zk9c( B == F9Bt ) = -2;
hTIt = zeros(BvK7*Zyuv,1);
hTIt(1) = iXlB(2) + (z5yZ(2)-1)*BvK7;
count = 1;
uypD = [-1 1 -BvK7 BvK7];
ZqiP = randperm(4);
for step = 0:min(kyt3,QBTZ)
if count < 1, break, end
xjb7 = count;
KZF3 = hTIt;
count = 0;
for b1Bp = 1:xjb7
g3rX = KZF3(b1Bp);
for DDW3=1:4
Mssc = g3rX + uypD(ZqiP(DDW3));
eLfP = zk9c(Mssc);
if eLfP == -2
jOGJ(Mssc) = g3rX;
path = WW7m(Mssc,jOGJ,BvK7,step+1);
return
end
if eLfP == -1 && B(Mssc) == 0
zk9c(Mssc) = step+1;
jOGJ(Mssc) = g3rX;
count = count + 1;
hTIt(count) = Mssc;
end
end
end
end
path = [];
end
function path = kaC8(B,H1W2,NfgO,iXlB,z5yZ,F9Bt,D2D2,TYEb,QBTZ)
[BvK7 Zyuv] = size(B);
MaDE = false(BvK7,Zyuv);
jOGJ = zeros(BvK7,Zyuv);
zk9c = -ones(BvK7,Zyuv);
zk9c(iXlB(1),z5yZ(1)) = -2;
zk9c( B == F9Bt ) = -2;
maxstep = min((D2D2*27)+TYEb,QBTZ+1);
K95h = zeros(maxstep+28,1);
Luf0 = iXlB(2) + (z5yZ(2)-1)*BvK7;
K95h(1) = Luf0;
uypD = [-BvK7 BvK7 -1 1];
for step = 1:maxstep
while K95h(step)>0
g3rX = K95h(step);
K95h(step)=zk9c(g3rX);
for DDW3 = 1:4
Mssc = g3rX + uypD(DDW3);
eLfP = zk9c(Mssc);
if eLfP==-1
if B(Mssc) == 0
zk9c(Mssc) = K95h(step+1);
K95h(step+1) = Mssc;
jOGJ(Mssc) = g3rX;
elseif (H1W2(Mssc)&&(DDW3<3)) || (NfgO(Mssc)&&(DDW3>2))
zk9c(Mssc) = K95h(step+26);
K95h(step+26) = Mssc;
jOGJ(Mssc) = g3rX;
MaDE(Mssc) = true;
end
end
if eLfP==-2
jOGJ(Mssc) = g3rX;
xDKX=mod(Mssc,BvK7);
QyZc=ceil(Mssc/BvK7);
path = zeros(step+1,4);
YD_A = 0;
while Mssc~=Luf0
YD_A = YD_A + 1;
path(YD_A,1:2) = [xDKX QyZc];						Mssc = jOGJ(Mssc);
xDKX=mod(Mssc,BvK7);
QyZc=ceil(Mssc/BvK7);
path(YD_A,3:4) = [xDKX QyZc];
if MaDE(xDKX,QyZc)
YD_A = YD_A + 1;
path(YD_A,:) = [xDKX QyZc xDKX QyZc];
end
end
path = path(1:YD_A,:);
return
end
end
end
end
path = [];
end
function W = AjCh(B)
[W,zrBg] = E2xZ(B);
Uo4T = 0;
QlGX = round(mod(B(:),2));
if zrBg < 2100
return
end
[tEDU,QN2Z] = size(B);
B = flipud(fliplr(B'));
[q6rH,ISxx] = E2xZ(B);
if zrBg > ISxx
W = [tEDU-q6rH(:,2)+1 QN2Z-q6rH(:,1)+1 tEDU-q6rH(:,4)+1 QN2Z-q6rH(:,3)+1];
end
if QlGX~=Uo4T;        W = zeros(0,4);    end
end
function [W,zrBg] = E2xZ(B)
[u_M3,kdio]=size(B);
kWqF=nan(u_M3+2,kdio+2);
kWqF(2:end-1,2:end-1)=B;
iuqe = kWqF;
D2D2 = 4;
if size(iuqe,2) > 20
xhov = 4;
l7QH = 8;
kyt3 = 12;
else
xhov = 3;
l7QH = 7;
kyt3 = 11;
end
zrBg = inf;
EFmF = [1 2;2 1];
EQCy = [1 3;3 1];
ML3k = [3 2 1;1 2 3];
for zFQ0 = 1:2
if zFQ0 == 2
[vv5B uTcO] = KcZg(iuqe,xhov,EFmF(zFQ0,:));
[kPZx hcfx] = YoMx(uTcO,vv5B,l7QH,EQCy(zFQ0,:));
[WEMP ogZP] = YoMx(hcfx,kPZx,kyt3,EQCy(zFQ0,:));
else
[vv5B uTcO] = KcZg(iuqe,4,EFmF(zFQ0,:));
[WEMP ogZP] = YoMx(uTcO,vv5B,11,EQCy(zFQ0,:));
end
for aRMM = 1:2
if zFQ0 == 2 && aRMM == 2 && zrBg > 2100, return, end
H9zg = mzc4(iuqe,ogZP,WEMP,D2D2,kyt3,ML3k(aRMM,:))-1;
RZYU = sWBq(B,H9zg);
if RZYU <= zrBg
zrBg = RZYU;
W = H9zg;
D2D2 = D2D2 - 1;
end
end
end
if u_M3*kdio > 290; return; end
o5VE = sum(W(:,1)==W(:,3)&W(:,2)==W(:,4));
if o5VE <= 4
hgsO = EgEz(B);
Y5Nv = sWBq(B,hgsO);
if Y5Nv < zrBg
W = hgsO;
zrBg = Y5Nv;
end
end
end
function path = Jzus(B,iXlB,z5yZ,F9Bt,kyt3,QBTZ)
function path = lCEy(VAqK,H_Gp,wuQh)
CGDj(VAqK,H_Gp) = elLP(b1Bp);
WFR6(VAqK,H_Gp) = Qzv1(b1Bp);
path = zeros(wuQh,4);
for ySUs = 1:wuQh
path(ySUs,1:2) = [VAqK H_Gp];
g0Ht = CGDj(VAqK,H_Gp);
lOM0 = WFR6(VAqK,H_Gp);
path(ySUs,3:4) = [g0Ht lOM0];
VAqK = g0Ht;
H_Gp = lOM0;
end
end
[BvK7 Zyuv] = size(B);
CGDj = zeros(BvK7,Zyuv);
WFR6 = zeros(BvK7,Zyuv);
zk9c = -ones(BvK7,Zyuv);
zk9c(iXlB(2),z5yZ(2)) = 0;
zk9c(iXlB(1),z5yZ(1)) = -2;
zk9c( B == F9Bt ) = -2;
pNTx = zeros(BvK7*Zyuv,1);
I6a9 = zeros(BvK7*Zyuv,1);
count = 1;
pNTx(1) = iXlB(2);
I6a9(1) = z5yZ(2);
RtST=[-1 1 0 0];
Nj_C=[0 0 -1 1];
for step = 0:min(kyt3,QBTZ)
if count < 1, break, end
xjb7 = count;
elLP = pNTx(1:xjb7);
Qzv1 = I6a9(1:xjb7);
count = 0;
for b1Bp = 1:xjb7
TUoL = Qzv1(b1Bp);
g3rX = elLP(b1Bp);
for DDW3=1:4
VAqK = g3rX + RtST(DDW3);
H_Gp = TUoL + Nj_C(DDW3);
Mssc = VAqK + (H_Gp-1)*BvK7;
eLfP = zk9c(Mssc);
if eLfP == -2
path = lCEy(VAqK,H_Gp,step+1);
return
elseif eLfP == -1 && B(Mssc) == 0
zk9c(Mssc) = step+1;
CGDj(Mssc) = g3rX;
WFR6(Mssc) = TUoL;
count = count + 1; pNTx(count) = VAqK; I6a9(count) = H_Gp;
end
end
end
end
path = [];
end
function pJcG = EgEz(ruhh)
HZSI = unique(ruhh);
HZSI(1) = [];
AQw0 = zeros(size(HZSI));
for b1Bp = 1:length(AQw0)
AQw0(b1Bp) = nnz(HZSI(b1Bp) == ruhh(:));
end
for b1Bp = 1:length(AQw0)
if AQw0(b1Bp) == 1
ruhh(HZSI(b1Bp) == ruhh(:)) = -1;
end
end
tKiX = zeros(size(ruhh)+2);
bXED = repmat(-1,size(tKiX));
bXED(2:end-1,2:end-1) = ruhh;
pJcG = [];
[kCRm, GJO8] = find(bXED>0);
muIs = (size(bXED,1)/2 - kCRm).^2 + (size(bXED,2)/2 - GJO8).^2;
[muIs, order] = sort(muIs);
order = order';
for Laci = 1:length(kCRm)-1
D9qo = 0;
guCU = 32;
for b1Bp = order
if tKiX(kCRm(b1Bp), GJO8(b1Bp))
continue
end
[UF7G, fS9b, ET0q] = mfk7(bXED, tKiX, kCRm(b1Bp), GJO8(b1Bp), guCU);
if UF7G > D9qo
D9qo = UF7G;
tSLX = fS9b;
guCU = ET0q;
if guCU == 1
break
end
end
end
if D9qo == 0
pJcG = pJcG - 1;
return
end
tKiX = kswu(tKiX, tSLX, bXED(tSLX(1,1), tSLX(1,2)));
bXED = kswu(bXED, tSLX, bXED(tSLX(1,1), tSLX(1,2)));
pJcG = [pJcG; tSLX];
end
pJcG = pJcG - 1;
end
function [D9qo, tSLX, guCU] = mfk7(ruhh, tKiX, KZF3, Qzv1, dgke)
D9qo = 0;
tSLX = [];
ySUs = [1 -1 0 0];
Laci = [0 0 1 -1];
if ~any(tKiX(:)==ruhh(KZF3,Qzv1))
tKiX = ruhh;
end
bXED = ruhh;
bXED(bXED>0) = -1;
bXED(KZF3,Qzv1) = 1;
guCU = Inf;
HZSI = ruhh(KZF3,Qzv1);
for b1Bp = 1:dgke-2
[kCRm, GJO8] = find(bXED==b1Bp);
for AQw0 = 1:length(kCRm)
for EZEX = 1:4
sXPH = kCRm(AQw0) + ySUs(EZEX);
th20 = GJO8(AQw0) + Laci(EZEX);
if tKiX(sXPH,th20) == HZSI && ~(sXPH == KZF3 && th20 == Qzv1)
guCU = b1Bp;
break
end
x4jm = bXED(sXPH,th20);
if x4jm == 0
bXED(sXPH,th20) = b1Bp+1;
end
end
if guCU < Inf
break
end
end
if guCU < Inf
break
end
end
if guCU == Inf
return
end
D9qo = ruhh(KZF3,Qzv1) - guCU;
if guCU == 1
tSLX = [KZF3, Qzv1, sXPH, th20];
return
end
tSLX = zeros(guCU,4);
for step = guCU:-1:1
for EZEX = 1:4
Pdpr = sXPH + ySUs(EZEX);
U3c9 = th20 + Laci(EZEX);
if bXED(Pdpr, U3c9) == step
break
end
end
tSLX(step,:) = [Pdpr, U3c9, sXPH, th20];
sXPH = Pdpr;
th20 = U3c9;
end
end
function [W B] = KcZg(B,kyt3,jI4K)
W = [];
[MCMj Laci] = Hl5x(B,jI4K);
if Laci < 1
return
end
MCMj=sortrows(MCMj,-jI4K);
for b1Bp = 1:Laci
if MCMj(b1Bp,2) >= 2
HZSI = MCMj(b1Bp,1);
[iXlB z5yZ] = find(B == HZSI);
xjb7 = size(iXlB,1);
WuLp = xjb7*(xjb7-1)/2;
dist = zeros(WuLp,3);
zFQ0 = 0;
for gfrl = 1:xjb7
for ruhh = (gfrl+1):xjb7
zFQ0 = zFQ0 + 1;
dist(zFQ0,1) = gfrl;
dist(zFQ0,2) = ruhh;
dist(zFQ0,3) = abs(iXlB(gfrl)-iXlB(ruhh)) + abs(z5yZ(gfrl)-z5yZ(ruhh));
end
end
[muIs NjO8] = sort(dist(:,3));
dist = dist(NjO8,:);
F0_X = reshape(dist(:,1:2)',[],1);
lj32 = 0;
XRoS = 1;
Du3C = false(xjb7,1);
for b1Bp=1:xjb7
SIRv = find( ~Du3C(F0_X(XRoS:end)) , 1 , 'first');
if isempty(SIRv)
break
end
gfrl = F0_X(SIRv);
Distance = abs(iXlB([1:gfrl-1,gfrl+1:end]')-iXlB(gfrl)) + abs(z5yZ([1:gfrl-1,gfrl+1:end]')-z5yZ(gfrl));
if max(Distance)>kyt3-1
break
end
path = mbD9(B,iXlB(gfrl),z5yZ(gfrl),iXlB([1:gfrl-1,gfrl+1:end]'),z5yZ([1:gfrl-1,gfrl+1:end]'), -HZSI, kyt3, 2*HZSI);
if size(path,1) > 0
W = [W; path];
B = kswu(B,path,-HZSI);
lj32 = 2;
break
end
end
if lj32 < 2
continue
end
for ySUs = 3:xjb7
[XJ2M PrCD] = find(B == -HZSI);
[iXlB z5yZ] = find(B == HZSI);
[XTUW,mBDy] = meshgrid(iXlB,XJ2M);
[bP2B,G81l] = meshgrid(iXlB,XJ2M);
Distance = abs(XTUW-mBDy) + abs(bP2B-G81l);
if max(Distance(:))>kyt3-1
break
end
path = mbD9(B,XJ2M,PrCD,iXlB,z5yZ, -HZSI, kyt3, 2*HZSI);
if size(path,1) > 0
W = [W; path];
B = kswu(B,path,-HZSI);
OskB = true;
else
break
end
end
end
end
end
function [W B] = YoMx(B,W,jrx0,jI4K)
[MCMj Laci] = Hl5x(B,jI4K);
if Laci < 1, return, end
MCMj=sortrows(MCMj,-jI4K);
for b1Bp = 1:Laci
HZSI = MCMj(b1Bp,1);
TNjV = sum(B == -HZSI);
if TNjV == 0
if MCMj(b1Bp,2) >= 2
[iXlB z5yZ] = find(B == HZSI);
xjb7 = size(iXlB,1);
WuLp = xjb7*(xjb7-1)/2;
dist = zeros(WuLp,3);
zFQ0 = 0;
for gfrl = 1:xjb7
for ruhh = (gfrl+1):xjb7
zFQ0 = zFQ0 + 1;
dist(zFQ0,1) = gfrl;
dist(zFQ0,2) = ruhh;
dist(zFQ0,3) = abs(iXlB(gfrl)-iXlB(ruhh)) + abs(z5yZ(gfrl)-z5yZ(ruhh));
end
end
[muIs NjO8] = sort(dist(:,3));
dist = dist(NjO8,:);
maxstep = min(jrx0,2*HZSI+1);
OskB = false;
for zFQ0 = 1:WuLp
if dist(zFQ0,3) > maxstep+1
break
end
gfrl = dist(zFQ0,1);
ruhh = dist(zFQ0,2);
path = Jzus(B,[iXlB(gfrl); iXlB(ruhh)], [z5yZ(gfrl); z5yZ(ruhh)], -HZSI, jrx0, 2*HZSI);
if size(path,1) > 0
W = [W; path];
B = kswu(B,path,-HZSI);
OskB = true;
break
end
end
if ~OskB
continue
end
end
end
[iXlB z5yZ] = find(B == HZSI);
Ut0x = size(iXlB,1);
maxstep = min(jrx0,HZSI+1);
for ySUs = 1:Ut0x
[XJ2M PrCD] = find(B == -HZSI);
[iXlB z5yZ] = find(B == HZSI);
OskB = false;
path = mbD9(B,XJ2M,PrCD,iXlB,z5yZ, -HZSI, jrx0, HZSI);
if size(path,1) > 0
W = [W; path];
B = kswu(B,path,-HZSI);
OskB = true;
end
if ~OskB
break
end
end
end
end
function [W B] = mzc4(kWqF,B,W,D2D2,jrx0,jI4K)
function Mj8x()
for pJcG = 1:size(path,1);
if path(pJcG,1) == path(pJcG,3)
gMHb(path(pJcG,1),path(pJcG,2)) = false;
gMHb(path(pJcG,3),path(pJcG,4)) = false;
if path(pJcG,2) == path(pJcG,4)
B(path(pJcG,1),path(pJcG,2)) = -9999;
end
end
if path(pJcG,2) == path(pJcG,4)
sM4e(path(pJcG,1),path(pJcG,2)) = false;
sM4e(path(pJcG,3),path(pJcG,4)) = false;
end
end
end
[gMHb sM4e] = btYB(kWqF,B,W);
[MCMj Laci] = Hl5x(B,jI4K);
if Laci < 1, return, end
MCMj=sortrows(MCMj,-jI4K);
for b1Bp = 1:Laci
HZSI = MCMj(b1Bp,1);
TNjV = sum(B == -HZSI);
if TNjV == 0
if MCMj(b1Bp,2) >= 2
[iXlB z5yZ] = find(B == HZSI);
xjb7 = size(iXlB,1);
WuLp = xjb7*(xjb7-1)/2;
dist = zeros(WuLp,3);
zFQ0 = 0;
for gfrl = 1:xjb7
for ruhh = (gfrl+1):xjb7
zFQ0 = zFQ0 + 1;
dist(zFQ0,1) = gfrl;
dist(zFQ0,2) = ruhh;
dist(zFQ0,3) = abs(iXlB(gfrl)-iXlB(ruhh)) + abs(z5yZ(gfrl)-z5yZ(ruhh));
end
end
[muIs NjO8] = sort(dist(:,3));
dist = dist(NjO8,:);
maxstep = min((D2D2*25)+jrx0,2*HZSI+1);
OskB = false;
for zFQ0 = 1:WuLp
if dist(zFQ0,3) > maxstep+1
break
end
gfrl = dist(zFQ0,1);
ruhh = dist(zFQ0,2);
path = kaC8(B,gMHb,sM4e,[iXlB(gfrl); iXlB(ruhh)], [z5yZ(gfrl); z5yZ(ruhh)], -HZSI, D2D2, jrx0, 2*HZSI);
if size(path,1) > 0
W = [W; path];
B = kswu(B,path,-HZSI);
Mj8x();
OskB = true;
break
end
end
if ~OskB
continue
end
end
end
[iXlB z5yZ] = find(B == HZSI);
Ut0x = size(iXlB,1);
maxstep = min((D2D2*25)+jrx0,HZSI+1);
for ySUs = 1:Ut0x
[XJ2M PrCD] = find(B == -HZSI);
[iXlB z5yZ] = find(B == HZSI);
OskB = false;
path = kqfh(B,gMHb,sM4e,XJ2M,PrCD,iXlB,z5yZ, -HZSI, D2D2, jrx0, HZSI);
if size(path,1) > 0
W = [W; path];
B = kswu(B,path,-HZSI);
Mj8x();
OskB = true;
end
if ~OskB
break
end
end
end
end
function path = kqfh(B,H1W2,NfgO,rowS,colS,ulEa,hwZz,F9Bt,D2D2,TYEb,QBTZ)
function path = WW7m(Mssc,step)
jOGJ(Mssc) = g3rX;
path = zeros(step,4);
YD_A = 0;
YTIX = 0;
qZng = zeros(step,1);
ghvv = zeros(step,1);
hqhZ = zeros(step,1);
while isempty(find(MJog==Mssc,1))
YD_A = YD_A + 1;
qZng(YD_A,1) = Mssc;
nTAc = jOGJ(Mssc);
ghvv(YD_A,1) = nTAc;
Mssc = nTAc;
if MaDE(Mssc)
YTIX = YTIX + 1;
hqhZ(YTIX,1) = Mssc;
end
end
qZng = [ qZng(1:YD_A,:) ; hqhZ(1:YTIX,1) ];
ghvv = [ ghvv(1:YD_A,:) ; hqhZ(1:YTIX,1) ];
path = [ mod(qZng,BvK7) , ceil(qZng/BvK7) ,  mod(ghvv,BvK7) , ceil(ghvv/BvK7) ];
end
[BvK7 Zyuv] = size(B);
MaDE = false(BvK7,Zyuv);
jOGJ = zeros(BvK7,Zyuv);
zk9c = -ones(BvK7,Zyuv);
MJog = rowS + (colS-1)*BvK7;
zk9c(MJog) = 0;
zk9c(ulEa + (hwZz-1)*BvK7) = -2;
maxstep = min((D2D2*25)+TYEb,QBTZ+1);
Mb6z = zeros(maxstep+26,1);
jfsD = [-1 1];
for step = 0:maxstep
if step == 0
KZF3 = MJog;
elseif Mb6z(step) == 0
continue
else
KZF3 = find(zk9c == step);
end
xjb7 = numel(KZF3);
for b1Bp = 1:xjb7
g3rX = KZF3(b1Bp);
for FR34 = 1:2
Mssc = g3rX + jfsD(FR34) * BvK7;
eLfP = zk9c(Mssc);
if eLfP == -2
path = WW7m(Mssc,step+1);
return
elseif eLfP == -1
if B(Mssc) == 0
zk9c(Mssc) = step+1; Mb6z(step+1) = 1;
jOGJ(Mssc) = g3rX;
elseif H1W2(Mssc)
zk9c(Mssc) = step+26; Mb6z(step+26) = 1;
jOGJ(Mssc) = g3rX;
MaDE(Mssc) = true;
end
end
end
for FR34 = 1:2
Mssc = g3rX + jfsD(FR34);
eLfP = zk9c(Mssc);
if eLfP == -2
path = WW7m(Mssc,step+1);
return
elseif eLfP == -1
if B(Mssc) == 0
zk9c(Mssc) = step+1; Mb6z(step+1) = 1;
jOGJ(Mssc) = g3rX;
elseif NfgO(Mssc)
zk9c(Mssc) = step+26; Mb6z(step+26) = 1;
jOGJ(Mssc) = g3rX;
MaDE(Mssc) = true;
end
end
end
end
end
path = zeros(0,4);
end
function path = mbD9(B,rowS,colS,aBmf,G6EX,F9Bt,kyt3,QBTZ)
[BvK7 Zyuv] = size(B);
CGDj = zeros(BvK7,Zyuv);
WFR6 = zeros(BvK7,Zyuv);
zk9c = -ones(BvK7,Zyuv);
zk9c(rowS+(colS-1)*BvK7) = 0;
zk9c(aBmf+(G6EX-1)*BvK7) = -2;
hTIt = zeros(BvK7*Zyuv,1);
I6a9 = zeros(BvK7*Zyuv,1);
count = numel(rowS);
hTIt(1:count) = rowS;
I6a9(1:count) = colS;
RtST=[-1 1 0 0];
Nj_C=[0 0 -1 1];
for step = 0:min(kyt3,QBTZ)
if count < 1, break, end
xjb7 = count;
elLP = hTIt(1:xjb7);
Qzv1 = I6a9(1:xjb7);
count = 0;
for b1Bp = 1:xjb7
TUoL = Qzv1(b1Bp);
g3rX = elLP(b1Bp);
for DDW3=1:4
VAqK = g3rX + RtST(DDW3);
H_Gp = TUoL + Nj_C(DDW3);
Mssc = VAqK + (H_Gp-1)*BvK7;
eLfP = zk9c(Mssc);
if eLfP == -2
wuQh=step+1;
CGDj(VAqK,H_Gp) = elLP(b1Bp);
WFR6(VAqK,H_Gp) = Qzv1(b1Bp);
path = zeros(wuQh,4);
for ySUs = 1:wuQh
path(ySUs,1:2) = [VAqK H_Gp];
g0Ht = CGDj(VAqK,H_Gp);
lOM0 = WFR6(VAqK,H_Gp);
path(ySUs,3:4) = [g0Ht lOM0];
VAqK = g0Ht;
H_Gp = lOM0;
end
return
end
if eLfP == -1 && B(Mssc) == 0
zk9c(Mssc) = step+1;
CGDj(Mssc) = g3rX;
WFR6(Mssc) = TUoL;
count = count + 1; hTIt(count) = VAqK; I6a9(count) = H_Gp;
end
end
end
end
path = [];
end