ID:49795
Title:Marco Tullio 197
Author:Fabio Carnevale
Date:2008-05-07 11:59:34
Score:13432.6820
Result:133932.00 (cyc: 21, node: 6769)
CPU Time:35.7714
Status:Passed
Comments:
Based on:none
Code:
function W = solv(B)
d32q=315;
nmV5 = rand(43,1);
W=zeh9(B);
naJC = l_Ht(B,W);
[l92C,eWZ2] = size(B);
r4NO = B(l92C:-1:1,:);
r4NO = r4NO.';
[atf_,m1rB] = XYYx(r4NO,[1 2],[1 2],4*l92C*eWZ2);
if naJC > m1rB
W = [l92C-atf_(:,2)+1 atf_(:,1) l92C-atf_(:,4)+1 atf_(:,3)];
naJC=m1rB;
end
XMP_=rand('state');
rand(d32q,1);
if naJC>1000 && rand<.5
[atf_,m1rB] = XYYx(r4NO,[1 2],[1 2],4*l92C*eWZ2);
if naJC > m1rB
W = [l92C-atf_(:,2)+1 atf_(:,1) l92C-atf_(:,4)+1 atf_(:,3)];
naJC=m1rB;
end
end
if naJC>1000 && rand<.5
[atf_,m1rB] = XYYx(r4NO,[1 2],[1 2],4*l92C*eWZ2);
if naJC > m1rB
W = [l92C-atf_(:,2)+1 atf_(:,1) l92C-atf_(:,4)+1 atf_(:,3)];
naJC=m1rB;
end
end
rand('state',XMP_);
end
function [W,naJC] = XYYx(hS7U,DmR9,f9ui,PVaj)
[U58o,sfpg]=size(hS7U);
xVRz= -ones(U58o+2,sfpg+2);
xVRz(2:end-1,2:end-1)=hS7U;
voNs = xVRz;
SYXf = 4;
if size(voNs,2) > 20
sCL0 = 4;
yTmt = 8;
REl6 = 18;
else
sCL0 = 3;
yTmt = 7;
REl6 = 13;
end
naJC = inf;
i7BK = [1 2;2 1];
uBYk = [1 3;3 1];
nRNL = [3 2 1;1 2 3];
for MXsG = DmR9
if MXsG == 2
[KiRE Lqwn] = ODA6(voNs,sCL0,i7BK(MXsG,:));
[Ya8c f2E_] = hd1Y(Lqwn,KiRE,yTmt,uBYk(MXsG,:));
[NFaI XiJl] = hd1Y(f2E_,Ya8c,REl6,uBYk(MXsG,:));
else
[KiRE Lqwn] = ODA6(voNs,4,i7BK(MXsG,:));
[NFaI XiJl] = hd1Y(Lqwn,KiRE,11,uBYk(MXsG,:));
end
for ey3h = f9ui
bAGS = akyG(voNs,XiJl,NFaI,SYXf,REl6,nRNL(ey3h,:))-1;
yCjr = l_Ht(hS7U,bAGS);
if yCjr <= naJC
naJC = yCjr;
W = bAGS;
SYXf = SYXf - 1;
end
end
end
end
function NvS7 = l_Ht(B,W)
U58o=size(B,1);
B(W(:,1)+(W(:,2)-1)*U58o)=0;
B(W(:,3)+(W(:,4)-1)*U58o)=0;
NvS7=sum(B(:))+size(W,1)+sum(W(:,1)==W(:,3)&W(:,2)==W(:,4))*24;
end
function [Zi3H xMmg] = fm2w(B,iByA)
Ltjn = sort(B(B>0),'descend');
mvJM = size(Ltjn,1);
if mvJM < 1
Zi3H = [];
xMmg = 0;
return
end
UHs_=Ltjn(diff([0;Ltjn])~=0);
Zi3H = zeros(nnz(UHs_),3);
mCTC=histc(Ltjn,UHs_(end:-1:1));
Zi3H(:,1)=UHs_;
Zi3H(:,2)=mCTC(end:-1:1);
xMmg=nnz(UHs_);
if iByA < 3, return, end
for thId = 1:xMmg
if Zi3H(thId,2) >= 2
Fe51 = Zi3H(thId,1);
[qpqN cib3] = find(B == Fe51);
RhEY = 0;
gjJ_ = size(qpqN,1);
RhEY=sum(abs(diff(qpqN))+abs(diff(cib3)));
Zi3H(thId,3) = Zi3H(thId,2)*Fe51 - 0.85 * RhEY;
end
end
end
function [W B] = ODA6(B,REl6,iByA)
W = [];
[Zi3H xMmg] = fm2w(B,iByA);
if xMmg < 1
return
end
Zi3H=sortrows(Zi3H,-iByA);
for thId = 1:xMmg
if Zi3H(thId,2) >= 2
Fe51 = Zi3H(thId,1);
[qpqN cib3] = find(B == Fe51);
gjJ_ = size(qpqN,1);
gvdy = gjJ_*(gjJ_-1)/2;
dist = zeros(gvdy,3);
[s3Kf rUTi]=find(tril(ones(gjJ_),-1));
dist(:,1)=rUTi;
dist(:,2)=s3Kf;
dist(:,3)=abs(cib3(s3Kf)-cib3(rUTi))+abs(qpqN(s3Kf)-qpqN(rUTi));
[RhEY cnmQ] = sort(dist(:,3));
dist = dist(cnmQ,:);
mvJM = 0;
for MXsG = 1:gvdy
if dist(MXsG,3) > REl6+1
break
end
uCzs = dist(MXsG,1);
JQSH = dist(MXsG,2);
path = ShnM(B,[qpqN(uCzs); qpqN(JQSH)], [cib3(uCzs); cib3(JQSH)], -Fe51, REl6, 2*Fe51);
if size(path,1) > 0
W = [W; path];
B = sEst(B,path,-Fe51);
mvJM = 2;
edit = [1:(uCzs-1) (uCzs+1):(JQSH-1) (JQSH+1):gjJ_];
qpqN = [qpqN(uCzs); qpqN(JQSH); qpqN(edit)];
cib3 = [cib3(uCzs); cib3(JQSH); cib3(edit)];
break
else
end
end
if mvJM < 2
continue
end
for q3Ot = 3:gjJ_
[WSva OUfg] = find(B == -Fe51);
CPMZ = size(WSva,1);
gvdy =  CPMZ * (gjJ_ - mvJM);
IBAB = (1:CPMZ*gjJ_)';
JQSH=mod(IBAB-1,gjJ_)+1;
uCzs=ceil(IBAB/gjJ_);
Gd0B = (JQSH>mvJM);
uCzs = uCzs(Gd0B);
JQSH = JQSH(Gd0B);
RhEY = abs(WSva(uCzs)-qpqN(JQSH)) + abs(OUfg(uCzs)-cib3(JQSH));
dist = [uCzs,JQSH,RhEY];
[RhEY cnmQ] = sort(dist(:,3));
dist = dist(cnmQ,:);
NyGw = false(gjJ_,1);
UlOH = false;
for MXsG = 1:gvdy
if dist(MXsG,3) > REl6+1
break
end
JQSH = dist(MXsG,2);
if NyGw(JQSH)
randperm(4);
continue
end
uCzs = dist(MXsG,1);
path = ShnM(B,[WSva(uCzs); qpqN(JQSH)], [OUfg(uCzs); cib3(JQSH)], -Fe51, REl6, Fe51);
NyGw(JQSH)=true;
if size(path,1) > 0
W = [W; path];
B = sEst(B,path,-Fe51);
mvJM = mvJM + 1;
UlOH = true;
qpqN([q3Ot JQSH]) = qpqN([JQSH q3Ot]);
cib3([q3Ot JQSH]) = cib3([JQSH q3Ot]);
break
end
end
if ~UlOH
break
end
end
end
end
end
function [W B] = hd1Y(B,W,MqK4,iByA)
[Zi3H xMmg] = fm2w(B,iByA);
if xMmg < 1, return, end
Zi3H=sortrows(Zi3H,-iByA);
for thId = 1:xMmg
Fe51 = Zi3H(thId,1);
CPMZ = sum(B == -Fe51);
if CPMZ == 0
if Zi3H(thId,2) >= 2
[qpqN cib3] = find(B == Fe51);
gjJ_ = size(qpqN,1);
gvdy = gjJ_*(gjJ_-1)*.5;
IBAB = (1:gjJ_*gjJ_)';
JQSH=mod(IBAB-1,gjJ_)+1;
uCzs=ceil(IBAB/gjJ_);
Gd0B = (uCzs<JQSH);
uCzs = uCzs(Gd0B);
JQSH = JQSH(Gd0B);
RhEY = abs(qpqN(uCzs)-qpqN(JQSH)) + abs(cib3(uCzs)-cib3(JQSH));
dist = [uCzs,JQSH,RhEY];
[RhEY cnmQ] = sort(dist(:,3));
dist = dist(cnmQ,:);
maxstep = min(MqK4,2*Fe51+1);
UlOH = false;
for MXsG = 1:gvdy
if dist(MXsG,3) > maxstep+1
break
end
uCzs = dist(MXsG,1);
JQSH = dist(MXsG,2);
path = ShnM(B,[qpqN(uCzs); qpqN(JQSH)], [cib3(uCzs); cib3(JQSH)], -Fe51, MqK4, 2*Fe51);
if size(path,1) > 0
W = [W; path];
B = sEst(B,path,-Fe51);
UlOH = true;
break
end
end
if ~UlOH
continue
end
end
end
[qpqN cib3] = find(B == Fe51);
rGrK = size(qpqN,1);
maxstep = min(MqK4,Fe51+1);
for q3Ot = 1:rGrK
[WSva OUfg] = find(B == -Fe51);
CPMZ = size(WSva,1);
gvdy =  CPMZ * (rGrK-q3Ot+1);
dist = zeros(gvdy,3);
MXsG = 0;
IBAB = (1:CPMZ*rGrK)';
JQSH=mod(IBAB-1,rGrK)+1;
uCzs=ceil(IBAB/rGrK);
Gd0B = (JQSH>=q3Ot);
uCzs = uCzs(Gd0B);
JQSH = JQSH(Gd0B);
RhEY = abs(WSva(uCzs)-qpqN(JQSH)) + abs(OUfg(uCzs)-cib3(JQSH));
dist = [uCzs,JQSH,RhEY];
[RhEY cnmQ] = sort(dist(:,3));
dist = dist(cnmQ,:);
NyGw = false(rGrK,1);
UlOH = false;
for MXsG = 1:gvdy
if dist(MXsG,3) > maxstep+1
break
end
JQSH = dist(MXsG,2);
if NyGw(JQSH)
randperm(4);
continue
end
uCzs = dist(MXsG,1);
path = ShnM(B,[WSva(uCzs); qpqN(JQSH)], [OUfg(uCzs); cib3(JQSH)], -Fe51, MqK4, 2*Fe51);
NyGw(JQSH)=true;
if size(path,1) > 0
W = [W; path];
B = sEst(B,path,-Fe51);
UlOH = true;
qpqN([q3Ot JQSH]) = qpqN([JQSH q3Ot]);
cib3([q3Ot JQSH]) = cib3([JQSH q3Ot]);
break
end
end
if ~UlOH
break
end
end
end
end
function [j_EA a85N] = cHmc(xVRz,B,path)
[y6VS ZPJu] = size(B);
j_EA = xVRz == 0;
a85N = j_EA;
j_EA(:,[1 ZPJu]) = false;
a85N([1 y6VS],:) = false;
for thId = 1:size(path,1)
if path(thId,1) == path(thId,3)
j_EA(path(thId,1),path(thId,2)) = false;
j_EA(path(thId,3),path(thId,4)) = false;
end
if path(thId,2) == path(thId,4)
a85N(path(thId,1),path(thId,2)) = false;
a85N(path(thId,3),path(thId,4)) = false;
end
end
end
function B = sEst(B,path,JE0I)
B(path(1,1),path(1,2)) = JE0I;
for thId = 1:size(path,1);
B(path(thId,3),path(thId,4)) = JE0I;
end
end
function path = MJ19(fmkJ,OQ0I,y6VS,FFd_)
path = zeros(FFd_,4);
FgaV = mod(fmkJ,y6VS);
c2ya = ceil(fmkJ/y6VS);
for q3Ot = 1:FFd_
path(q3Ot,1:2) = [FgaV c2ya];
fmkJ = OQ0I(fmkJ);
FgaV = mod(fmkJ,y6VS);
c2ya = ceil(fmkJ/y6VS);
path(q3Ot,3:4) = [FgaV c2ya];
end
end
function path = ShnM(B,qpqN,cib3,JE0I,REl6,h40w)
[y6VS ZPJu] = size(B);
OQ0I = zeros(y6VS,ZPJu);
z8Sh = -ones(y6VS,ZPJu);
z8Sh(qpqN(2),cib3(2)) = 0;
z8Sh(qpqN(1),cib3(1)) = -2;
z8Sh( B == JE0I ) = -2;
I7IS = zeros(y6VS*ZPJu,1);
I7IS(1) = qpqN(2) + (cib3(2)-1)*y6VS;
count = 1;
VX_r = [-1 1 -y6VS y6VS];
PZ3d = randperm(4);
for step = 0:min(REl6,h40w)
if count < 1, break, end
gjJ_ = count;
fmkJ = I7IS;
count = 0;
for thId = 1:gjJ_
Yyrc = fmkJ(thId);
for gaK2=1:4
v9oU = Yyrc + VX_r(PZ3d(gaK2));
ZlEU = z8Sh(v9oU);
if ZlEU == -2
OQ0I(v9oU) = Yyrc;
path = MJ19(v9oU,OQ0I,y6VS,step+1);
return
end
if ZlEU == -1 && B(v9oU) == 0
z8Sh(v9oU) = step+1;
OQ0I(v9oU) = Yyrc;
count = count + 1;
I7IS(count) = v9oU;
end
end
end
end
path = [];
end
function path = W7cR(B,j_EA,a85N,qpqN,cib3,JE0I,SYXf,MqK4,h40w)
[y6VS ZPJu] = size(B);
eDER = false(y6VS,ZPJu);
OQ0I = zeros(y6VS,ZPJu);
z8Sh = -ones(y6VS,ZPJu);
z8Sh(qpqN(1),cib3(1)) = -2;
z8Sh( B == JE0I ) = -2;
maxstep = min((SYXf*27)+MqK4,h40w+1);
FLk8 = zeros(maxstep+28,1);
TKo9 = qpqN(2) + (cib3(2)-1)*y6VS;
FLk8(1) = TKo9;
VX_r = [-y6VS y6VS -1 1];
for step = 1:maxstep
while FLk8(step)>0
Yyrc = FLk8(step);
FLk8(step)=z8Sh(Yyrc);
for gaK2 = 1:4
v9oU = Yyrc + VX_r(gaK2);
ZlEU = z8Sh(v9oU);
if ZlEU==-1
if B(v9oU) == 0
z8Sh(v9oU) = FLk8(step+1);
FLk8(step+1) = v9oU;
OQ0I(v9oU) = Yyrc;
elseif (j_EA(v9oU)&&(gaK2<3)) || (a85N(v9oU)&&(gaK2>2))
z8Sh(v9oU) = FLk8(step+26);
FLk8(step+26) = v9oU;
OQ0I(v9oU) = Yyrc;
eDER(v9oU) = true;
end
end
if ZlEU==-2
OQ0I(v9oU) = Yyrc;
FgaV=mod(v9oU,y6VS);
c2ya=ceil(v9oU/y6VS);
path = zeros(step+1,4);
q3Ot = 0;
while v9oU~=TKo9
q3Ot = q3Ot + 1;
path(q3Ot,1:2) = [FgaV c2ya];						v9oU = OQ0I(v9oU);
FgaV=mod(v9oU,y6VS);
c2ya=ceil(v9oU/y6VS);
path(q3Ot,3:4) = [FgaV c2ya];
if eDER(FgaV,c2ya)
q3Ot = q3Ot + 1;
path(q3Ot,:) = [FgaV c2ya FgaV c2ya];
end
end
path = path(1:q3Ot,:);
return
end
end
end
end
path = [];
end
function W = zeh9(B)
[W,naJC] = OEVV(B);
sB8n = 0;
dQNc = round(mod(B(:),2));
if naJC < 2100
return
end
[f7YY,BxJZ] = size(B);
B = flipud(fliplr(B'));
[hO5R,qV_l] = OEVV(B);
if naJC > qV_l
W = [f7YY-hO5R(:,2)+1 BxJZ-hO5R(:,1)+1 f7YY-hO5R(:,4)+1 BxJZ-hO5R(:,3)+1];
end
if dQNc~=sB8n;        W = zeros(0,4);    end
end
function [W,naJC] = OEVV(B)
[U58o,sfpg]=size(B);
goAZ=nan(U58o+2,sfpg+2);
goAZ(2:end-1,2:end-1)=B;
voNs = goAZ;
SYXf = 4;
if size(voNs,2) > 20
sCL0 = 4;
yTmt = 8;
REl6 = 12;
else
sCL0 = 3;
yTmt = 7;
REl6 = 11;
end
naJC = inf;
i7BK = [1 2;2 1];
uBYk = [1 3;3 1];
nRNL = [3 2 1;1 2 3];
for MXsG = 1:2
if MXsG == 2
[KiRE Lqwn] = H5Hg(voNs,sCL0,i7BK(MXsG,:));
[Ya8c f2E_] = iAki(Lqwn,KiRE,yTmt,uBYk(MXsG,:));
[NFaI XiJl] = iAki(f2E_,Ya8c,REl6,uBYk(MXsG,:));
else
[KiRE Lqwn] = H5Hg(voNs,4,i7BK(MXsG,:));
[NFaI XiJl] = iAki(Lqwn,KiRE,11,uBYk(MXsG,:));
end
for ey3h = 1:2
if MXsG == 2 && ey3h == 2 && naJC > 2100, return, end
bAGS = akyG(voNs,XiJl,NFaI,SYXf,REl6,nRNL(ey3h,:))-1;
yCjr = l_Ht(B,bAGS);
if yCjr <= naJC
naJC = yCjr;
W = bAGS;
SYXf = SYXf - 1;
end
end
end
if U58o*sfpg > 290; return; end
G57F = sum(W(:,1)==W(:,3)&W(:,2)==W(:,4));
if G57F <= 4
z22F = gCEh(B);
uU5r = l_Ht(B,z22F);
if uU5r < naJC
W = z22F;
naJC = uU5r;
end
end
end
function path = EWHd(B,qpqN,cib3,JE0I,REl6,h40w)
function path = PuJ_(e1Ez,p9Qg,kfJu)
Z5Ek(e1Ez,p9Qg) = jQZN(thId);
SPrI(e1Ez,p9Qg) = yLxw(thId);
path = zeros(kfJu,4);
for CljC = 1:kfJu
path(CljC,1:2) = [e1Ez p9Qg];
OZo6 = Z5Ek(e1Ez,p9Qg);
s5gl = SPrI(e1Ez,p9Qg);
path(CljC,3:4) = [OZo6 s5gl];
e1Ez = OZo6;
p9Qg = s5gl;
end
end
[y6VS ZPJu] = size(B);
Z5Ek = zeros(y6VS,ZPJu);
SPrI = zeros(y6VS,ZPJu);
z8Sh = -ones(y6VS,ZPJu);
z8Sh(qpqN(2),cib3(2)) = 0;
z8Sh(qpqN(1),cib3(1)) = -2;
z8Sh( B == JE0I ) = -2;
TMu4 = zeros(y6VS*ZPJu,1);
ljPZ = zeros(y6VS*ZPJu,1);
count = 1;
TMu4(1) = qpqN(2);
ljPZ(1) = cib3(2);
luLU=[-1 1 0 0];
jh7h=[0 0 -1 1];
for step = 0:min(REl6,h40w)
if count < 1, break, end
gjJ_ = count;
jQZN = TMu4(1:gjJ_);
yLxw = ljPZ(1:gjJ_);
count = 0;
for thId = 1:gjJ_
IhfJ = yLxw(thId);
Yyrc = jQZN(thId);
for gaK2=1:4
e1Ez = Yyrc + luLU(gaK2);
p9Qg = IhfJ + jh7h(gaK2);
v9oU = e1Ez + (p9Qg-1)*y6VS;
ZlEU = z8Sh(v9oU);
if ZlEU == -2
path = PuJ_(e1Ez,p9Qg,step+1);
return
elseif ZlEU == -1 && B(v9oU) == 0
z8Sh(v9oU) = step+1;
Z5Ek(v9oU) = Yyrc;
SPrI(v9oU) = IhfJ;
count = count + 1; TMu4(count) = e1Ez; ljPZ(count) = p9Qg;
end
end
end
end
path = [];
end
function FJww = gCEh(JQSH)
Fe51 = unique(JQSH);
Fe51(1) = [];
RkAI = zeros(size(Fe51));
for thId = 1:length(RkAI)
RkAI(thId) = nnz(Fe51(thId) == JQSH(:));
end
for thId = 1:length(RkAI)
if RkAI(thId) == 1
JQSH(Fe51(thId) == JQSH(:)) = -1;
end
end
W4IV = zeros(size(JQSH)+2);
C87R = repmat(-1,size(W4IV));
C87R(2:end-1,2:end-1) = JQSH;
FJww = [];
[rVNa, tSar] = find(C87R>0);
RhEY = (size(C87R,1)/2 - rVNa).^2 + (size(C87R,2)/2 - tSar).^2;
[RhEY, order] = sort(RhEY);
order = order';
for xMmg = 1:length(rVNa)-1
QpZG = 0;
gF_M = 32;
for thId = order
if W4IV(rVNa(thId), tSar(thId))
continue
end
[NvS7, cWvR, QBDs] = w1rP(C87R, W4IV, rVNa(thId), tSar(thId), gF_M);
if NvS7 > QpZG
QpZG = NvS7;
O4jb = cWvR;
gF_M = QBDs;
if gF_M == 1
break
end
end
end
if QpZG == 0
FJww = FJww - 1;
return
end
W4IV = sEst(W4IV, O4jb, C87R(O4jb(1,1), O4jb(1,2)));
C87R = sEst(C87R, O4jb, C87R(O4jb(1,1), O4jb(1,2)));
FJww = [FJww; O4jb];
end
FJww = FJww - 1;
end
function [QpZG, O4jb, gF_M] = w1rP(JQSH, W4IV, fmkJ, yLxw, Me9m)
QpZG = 0;
O4jb = [];
CljC = [1 -1 0 0];
xMmg = [0 0 1 -1];
if ~any(W4IV(:)==JQSH(fmkJ,yLxw))
W4IV = JQSH;
end
C87R = JQSH;
C87R(C87R>0) = -1;
C87R(fmkJ,yLxw) = 1;
gF_M = Inf;
Fe51 = JQSH(fmkJ,yLxw);
for thId = 1:Me9m-2
[rVNa, tSar] = find(C87R==thId);
for RkAI = 1:length(rVNa)
for KY43 = 1:4
tWIX = rVNa(RkAI) + CljC(KY43);
CgQD = tSar(RkAI) + xMmg(KY43);
if W4IV(tWIX,CgQD) == Fe51 && ~(tWIX == fmkJ && CgQD == yLxw)
gF_M = thId;
break
end
F6Ai = C87R(tWIX,CgQD);
if F6Ai == 0
C87R(tWIX,CgQD) = thId+1;
end
end
if gF_M < Inf
break
end
end
if gF_M < Inf
break
end
end
if gF_M == Inf
return
end
QpZG = JQSH(fmkJ,yLxw) - gF_M;
if gF_M == 1
O4jb = [fmkJ, yLxw, tWIX, CgQD];
return
end
O4jb = zeros(gF_M,4);
for step = gF_M:-1:1
for KY43 = 1:4
yuNC = tWIX + CljC(KY43);
Jy9S = CgQD + xMmg(KY43);
if C87R(yuNC, Jy9S) == step
break
end
end
O4jb(step,:) = [yuNC, Jy9S, tWIX, CgQD];
tWIX = yuNC;
CgQD = Jy9S;
end
end
function [W B] = H5Hg(B,REl6,iByA)
W = [];
[Zi3H xMmg] = fm2w(B,iByA);
if xMmg < 1
return
end
Zi3H=sortrows(Zi3H,-iByA);
for thId = 1:xMmg
if Zi3H(thId,2) >= 2
Fe51 = Zi3H(thId,1);
[qpqN cib3] = find(B == Fe51);
gjJ_ = size(qpqN,1);
gvdy = gjJ_*(gjJ_-1)/2;
dist = zeros(gvdy,3);
MXsG = 0;
for uCzs = 1:gjJ_
for JQSH = (uCzs+1):gjJ_
MXsG = MXsG + 1;
dist(MXsG,1) = uCzs;
dist(MXsG,2) = JQSH;
dist(MXsG,3) = abs(qpqN(uCzs)-qpqN(JQSH)) + abs(cib3(uCzs)-cib3(JQSH));
end
end
[RhEY cnmQ] = sort(dist(:,3));
dist = dist(cnmQ,:);
taAn = reshape(dist(:,1:2)',[],1);
mvJM = 0;
Q8c3 = 1;
XEsZ = false(gjJ_,1);
for thId=1:gjJ_
ApvM = find( ~XEsZ(taAn(Q8c3:end)) , 1 , 'first');
if isempty(ApvM)
break
end
uCzs = taAn(ApvM);
Distance = abs(qpqN([1:uCzs-1,uCzs+1:end]')-qpqN(uCzs)) + abs(cib3([1:uCzs-1,uCzs+1:end]')-cib3(uCzs));
if max(Distance)>REl6-1
break
end
path = mRkX(B,qpqN(uCzs),cib3(uCzs),qpqN([1:uCzs-1,uCzs+1:end]'),cib3([1:uCzs-1,uCzs+1:end]'), -Fe51, REl6, 2*Fe51);
if size(path,1) > 0
W = [W; path];
B = sEst(B,path,-Fe51);
mvJM = 2;
break
end
end
if mvJM < 2
continue
end
for CljC = 3:gjJ_
[WSva OUfg] = find(B == -Fe51);
[qpqN cib3] = find(B == Fe51);
[wxbk,Axcu] = meshgrid(qpqN,WSva);
[gZmR,U9xv] = meshgrid(qpqN,WSva);
Distance = abs(wxbk-Axcu) + abs(gZmR-U9xv);
if max(Distance(:))>REl6-1
break
end
path = mRkX(B,WSva,OUfg,qpqN,cib3, -Fe51, REl6, 2*Fe51);
if size(path,1) > 0
W = [W; path];
B = sEst(B,path,-Fe51);
UlOH = true;
else
break
end
end
end
end
end
function [W B] = iAki(B,W,QZqL,iByA)
[Zi3H xMmg] = fm2w(B,iByA);
if xMmg < 1, return, end
Zi3H=sortrows(Zi3H,-iByA);
for thId = 1:xMmg
Fe51 = Zi3H(thId,1);
CPMZ = sum(B == -Fe51);
if CPMZ == 0
if Zi3H(thId,2) >= 2
[qpqN cib3] = find(B == Fe51);
gjJ_ = size(qpqN,1);
gvdy = gjJ_*(gjJ_-1)/2;
dist = zeros(gvdy,3);
MXsG = 0;
for uCzs = 1:gjJ_
for JQSH = (uCzs+1):gjJ_
MXsG = MXsG + 1;
dist(MXsG,1) = uCzs;
dist(MXsG,2) = JQSH;
dist(MXsG,3) = abs(qpqN(uCzs)-qpqN(JQSH)) + abs(cib3(uCzs)-cib3(JQSH));
end
end
[RhEY cnmQ] = sort(dist(:,3));
dist = dist(cnmQ,:);
maxstep = min(QZqL,2*Fe51+1);
UlOH = false;
for MXsG = 1:gvdy
if dist(MXsG,3) > maxstep+1
break
end
uCzs = dist(MXsG,1);
JQSH = dist(MXsG,2);
path = EWHd(B,[qpqN(uCzs); qpqN(JQSH)], [cib3(uCzs); cib3(JQSH)], -Fe51, QZqL, 2*Fe51);
if size(path,1) > 0
W = [W; path];
B = sEst(B,path,-Fe51);
UlOH = true;
break
end
end
if ~UlOH
continue
end
end
end
[qpqN cib3] = find(B == Fe51);
w3d7 = size(qpqN,1);
maxstep = min(QZqL,Fe51+1);
for CljC = 1:w3d7
[WSva OUfg] = find(B == -Fe51);
[qpqN cib3] = find(B == Fe51);
UlOH = false;
path = mRkX(B,WSva,OUfg,qpqN,cib3, -Fe51, QZqL, Fe51);
if size(path,1) > 0
W = [W; path];
B = sEst(B,path,-Fe51);
UlOH = true;
end
if ~UlOH
break
end
end
end
end
function [W B] = akyG(goAZ,B,W,SYXf,QZqL,iByA)
function BHlL()
for FJww = 1:size(path,1);
if path(FJww,1) == path(FJww,3)
CtUH(path(FJww,1),path(FJww,2)) = false;
CtUH(path(FJww,3),path(FJww,4)) = false;
if path(FJww,2) == path(FJww,4)
B(path(FJww,1),path(FJww,2)) = -9999;
end
end
if path(FJww,2) == path(FJww,4)
r6St(path(FJww,1),path(FJww,2)) = false;
r6St(path(FJww,3),path(FJww,4)) = false;
end
end
end
[CtUH r6St] = cHmc(goAZ,B,W);
[Zi3H xMmg] = fm2w(B,iByA);
if xMmg < 1, return, end
Zi3H=sortrows(Zi3H,-iByA);
for thId = 1:xMmg
Fe51 = Zi3H(thId,1);
CPMZ = sum(B == -Fe51);
if CPMZ == 0
if Zi3H(thId,2) >= 2
[qpqN cib3] = find(B == Fe51);
gjJ_ = size(qpqN,1);
gvdy = gjJ_*(gjJ_-1)/2;
dist = zeros(gvdy,3);
MXsG = 0;
for uCzs = 1:gjJ_
for JQSH = (uCzs+1):gjJ_
MXsG = MXsG + 1;
dist(MXsG,1) = uCzs;
dist(MXsG,2) = JQSH;
dist(MXsG,3) = abs(qpqN(uCzs)-qpqN(JQSH)) + abs(cib3(uCzs)-cib3(JQSH));
end
end
[RhEY cnmQ] = sort(dist(:,3));
dist = dist(cnmQ,:);
maxstep = min((SYXf*25)+QZqL,2*Fe51+1);
UlOH = false;
for MXsG = 1:gvdy
if dist(MXsG,3) > maxstep+1
break
end
uCzs = dist(MXsG,1);
JQSH = dist(MXsG,2);
path = W7cR(B,CtUH,r6St,[qpqN(uCzs); qpqN(JQSH)], [cib3(uCzs); cib3(JQSH)], -Fe51, SYXf, QZqL, 2*Fe51);
if size(path,1) > 0
W = [W; path];
B = sEst(B,path,-Fe51);
BHlL();
UlOH = true;
break
end
end
if ~UlOH
continue
end
end
end
[qpqN cib3] = find(B == Fe51);
w3d7 = size(qpqN,1);
maxstep = min((SYXf*25)+QZqL,Fe51+1);
for CljC = 1:w3d7
[WSva OUfg] = find(B == -Fe51);
[qpqN cib3] = find(B == Fe51);
UlOH = false;
path = dqNk(B,CtUH,r6St,WSva,OUfg,qpqN,cib3, -Fe51, SYXf, QZqL, Fe51);
if size(path,1) > 0
W = [W; path];
B = sEst(B,path,-Fe51);
BHlL();
UlOH = true;
end
if ~UlOH
break
end
end
end
end
function path = dqNk(B,CtUH,r6St,rowS,colS,STCh,JxM3,JE0I,SYXf,QZqL,h40w)
function path = PuJ_(v9oU,step)
nJju(v9oU) = Bfhi;
e1Ez=mod(v9oU,y6VS);
p9Qg=ceil(v9oU/y6VS);
path = zeros(step,4);
CljC = 0;
while isempty(find(rowS==e1Ez & colS==p9Qg,1))
CljC = CljC + 1;
path(CljC,1:2) = [e1Ez p9Qg];
v9oU = e1Ez + (p9Qg-1)*y6VS;
loZl = nJju(v9oU);
OZo6=mod(loZl,y6VS);
s5gl=ceil(loZl/y6VS);
path(CljC,3:4) = [OZo6 s5gl];
e1Ez = OZo6;
p9Qg = s5gl;
if ICWo(e1Ez,p9Qg)
CljC = CljC + 1;
path(CljC,:) = [e1Ez p9Qg e1Ez p9Qg];
end
end
path = path(1:CljC,:);
end
[y6VS ZPJu] = size(B);
ICWo = false(y6VS,ZPJu);
nJju = zeros(y6VS,ZPJu);
z8Sh = -ones(y6VS,ZPJu);
z8Sh(rowS + (colS-1)*y6VS) = 0;
z8Sh(STCh + (JxM3-1)*y6VS) = -2;
maxstep = min((SYXf*25)+QZqL,h40w+1);
L7YD = zeros(maxstep+26,1);
for step = 0:maxstep
if step == 0
JLk4 = rowS + (colS-1)*y6VS;
elseif L7YD(step) == 0
continue
else
JLk4 = find(z8Sh == step);
end
gjJ_ = numel(JLk4);
for thId = 1:gjJ_
Bfhi = JLk4(thId);
v9oU = Bfhi - y6VS;
ZlEU = z8Sh(v9oU);
if ZlEU == -2
path = PuJ_(v9oU,step+1);
return
elseif ZlEU == -1
if B(v9oU) == 0
z8Sh(v9oU) = step+1; L7YD(step+1) = 1;
nJju(v9oU) = Bfhi;
elseif CtUH(v9oU)
z8Sh(v9oU) = step+26; L7YD(step+26) = 1;
nJju(v9oU) = Bfhi;
ICWo(v9oU) = true;
end
end
v9oU = Bfhi + y6VS;
ZlEU = z8Sh(v9oU);
if ZlEU == -2
path = PuJ_(v9oU,step+1);
return
elseif ZlEU == -1
if B(v9oU) == 0
z8Sh(v9oU) = step+1; L7YD(step+1) = 1;
nJju(v9oU) = Bfhi;
elseif CtUH(v9oU)
z8Sh(v9oU) = step+26; L7YD(step+26) = 1;
nJju(v9oU) = Bfhi;
ICWo(v9oU) = true;
end
end
v9oU = Bfhi - 1;
ZlEU = z8Sh(v9oU);
if ZlEU == -2
path = PuJ_(v9oU,step+1);
return
elseif ZlEU == -1
if B(v9oU) == 0
z8Sh(v9oU) = step+1; L7YD(step+1) = 1;
nJju(v9oU) = Bfhi;
elseif r6St(v9oU)
z8Sh(v9oU) = step+26; L7YD(step+26) = 1;
nJju(v9oU) = Bfhi;
ICWo(v9oU) = true;
end
end
v9oU = Bfhi + 1;
ZlEU = z8Sh(v9oU);
if ZlEU == -2
path = PuJ_(v9oU,step+1);
return
elseif ZlEU == -1
if B(v9oU) == 0
z8Sh(v9oU) = step+1; L7YD(step+1) = 1;
nJju(v9oU) = Bfhi;
elseif r6St(v9oU)
z8Sh(v9oU) = step+26; L7YD(step+26) = 1;
nJju(v9oU) = Bfhi;
ICWo(v9oU) = true;
end
end
end
end
path = zeros(0,4);
end
function path = mRkX(B,rowS,colS,STCh,JxM3,JE0I,REl6,h40w)
[y6VS ZPJu] = size(B);
Z5Ek = zeros(y6VS,ZPJu);
SPrI = zeros(y6VS,ZPJu);
z8Sh = -ones(y6VS,ZPJu);
z8Sh(rowS+(colS-1)*y6VS) = 0;
z8Sh(STCh+(JxM3-1)*y6VS) = -2;
I7IS = zeros(y6VS*ZPJu,1);
ljPZ = zeros(y6VS*ZPJu,1);
count = numel(rowS);
I7IS(1:count) = rowS;
ljPZ(1:count) = colS;
luLU=[-1 1 0 0];
jh7h=[0 0 -1 1];
for step = 0:min(REl6,h40w)
if count < 1, break, end
gjJ_ = count;
jQZN = I7IS(1:gjJ_);
yLxw = ljPZ(1:gjJ_);
count = 0;
for thId = 1:gjJ_
IhfJ = yLxw(thId);
Yyrc = jQZN(thId);
for gaK2=1:4
e1Ez = Yyrc + luLU(gaK2);
p9Qg = IhfJ + jh7h(gaK2);
v9oU = e1Ez + (p9Qg-1)*y6VS;
ZlEU = z8Sh(v9oU);
if ZlEU == -2
kfJu=step+1;
Z5Ek(e1Ez,p9Qg) = jQZN(thId);
SPrI(e1Ez,p9Qg) = yLxw(thId);
path = zeros(kfJu,4);
for CljC = 1:kfJu
path(CljC,1:2) = [e1Ez p9Qg];
OZo6 = Z5Ek(e1Ez,p9Qg);
s5gl = SPrI(e1Ez,p9Qg);
path(CljC,3:4) = [OZo6 s5gl];
e1Ez = OZo6;
p9Qg = s5gl;
end
return
end
if ZlEU == -1 && B(v9oU) == 0
z8Sh(v9oU) = step+1;
Z5Ek(v9oU) = Yyrc;
SPrI(v9oU) = IhfJ;
count = count + 1; I7IS(count) = e1Ez; ljPZ(count) = p9Qg;
end
end
end
end
path = [];
end