| Code: | function W = solv(B)
iuOC=2951;
ZcGA = rand(43,1);
W=WY0q(B);
jSuI = tYbV(B,W);
[EmY7,OClo] = size(B);
JSYZ = B(EmY7:-1:1,:);
JSYZ = JSYZ.';
[Q6M0,AdvF] = AjqW(JSYZ,[1 2],[1 2],4*EmY7*OClo);
if jSuI > AdvF
W = [EmY7-Q6M0(:,2)+1 Q6M0(:,1) EmY7-Q6M0(:,4)+1 Q6M0(:,3)];
jSuI=AdvF;
end
OfZA=rand('state');
rand(iuOC,1);
if jSuI>1000 && rand<.5
[Q6M0,AdvF] = AjqW(JSYZ,[1 2],[1 2],4*EmY7*OClo);
if jSuI > AdvF
W = [EmY7-Q6M0(:,2)+1 Q6M0(:,1) EmY7-Q6M0(:,4)+1 Q6M0(:,3)];
jSuI=AdvF;
end
end
if jSuI>1000 && rand<.5
[Q6M0,AdvF] = AjqW(JSYZ,[1 2],[1 2],4*EmY7*OClo);
if jSuI > AdvF
W = [EmY7-Q6M0(:,2)+1 Q6M0(:,1) EmY7-Q6M0(:,4)+1 Q6M0(:,3)];
jSuI=AdvF;
end
end
rand('state',OfZA);
end
function [W,jSuI] = AjqW(c8Aj,L35k,UXE4,ko8J)
[LtPW,fo1h]=size(c8Aj);
uOhj= -ones(LtPW+2,fo1h+2);
uOhj(2:end-1,2:end-1)=c8Aj;
AnrP = uOhj;
kdz8 = 4;
if size(AnrP,2) > 20
tOCB = 4;
Pspq = 8;
BCuq = 18;
else
tOCB = 3;
Pspq = 7;
BCuq = 13;
end
jSuI = inf;
rwEQ = [1 2;2 1];
wzEq = [1 3;3 1];
a11Y = [3 2 1;1 2 3];
for HsUC = L35k
if HsUC == 2
[OzZf VY9l] = rCrn(AnrP,tOCB,rwEQ(HsUC,:));
[vSzv hm9_] = XRUu(VY9l,OzZf,Pspq,wzEq(HsUC,:));
[CdAJ RpMJ] = XRUu(hm9_,vSzv,BCuq,wzEq(HsUC,:));
else
[OzZf VY9l] = rCrn(AnrP,4,rwEQ(HsUC,:));
[CdAJ RpMJ] = XRUu(VY9l,OzZf,11,wzEq(HsUC,:));
end
for Ajr5 = UXE4
TB69 = nXRQ(AnrP,RpMJ,CdAJ,kdz8,BCuq,a11Y(Ajr5,:))-1;
RZJ5 = tYbV(c8Aj,TB69);
if RZJ5 <= jSuI
jSuI = RZJ5;
W = TB69;
kdz8 = kdz8 - 1;
end
end
end
end
function X3nO = tYbV(B,W)
LtPW=size(B,1);
B(W(:,1)+(W(:,2)-1)*LtPW)=0;
B(W(:,3)+(W(:,4)-1)*LtPW)=0;
X3nO=sum(B(:))+size(W,1)+sum(W(:,1)==W(:,3)&W(:,2)==W(:,4))*24;
end
function [ulTm d80F] = ciOU(B,dI5O)
jJzi = sort(B(B>0),'descend');
P0pr = size(jJzi,1);
if P0pr < 1
ulTm = [];
d80F = 0;
return
end
QRhp=jJzi(diff([0;jJzi])~=0);
ulTm = zeros(nnz(QRhp),3);
cr3O=histc(jJzi,QRhp(end:-1:1));
ulTm(:,1)=QRhp;
ulTm(:,2)=cr3O(end:-1:1);
d80F=nnz(QRhp);
if dI5O < 3, return, end
for Hxm_ = 1:d80F
if ulTm(Hxm_,2) >= 2
YxFZ = ulTm(Hxm_,1);
[tNlO rSII] = find(B == YxFZ);
CADa = 0;
BdmU = size(tNlO,1);
CADa=sum(abs(diff(tNlO))+abs(diff(rSII)));
ulTm(Hxm_,3) = ulTm(Hxm_,2)*YxFZ - 0.85 * CADa;
end
end
end
function [W B] = rCrn(B,BCuq,dI5O)
W = [];
[ulTm d80F] = ciOU(B,dI5O);
if d80F < 1
return
end
ulTm=sortrows(ulTm,-dI5O);
for Hxm_ = 1:d80F
if ulTm(Hxm_,2) >= 2
YxFZ = ulTm(Hxm_,1);
[tNlO rSII] = find(B == YxFZ);
BdmU = size(tNlO,1);
yF3s = BdmU*(BdmU-1)/2;
dist = zeros(yF3s,3);
[w86I ChO8]=find(tril(ones(BdmU),-1));
dist(:,1)=ChO8;
dist(:,2)=w86I;
dist(:,3)=abs(rSII(w86I)-rSII(ChO8))+abs(tNlO(w86I)-tNlO(ChO8));
[CADa nn1W] = sort(dist(:,3));
dist = dist(nn1W,:);
P0pr = 0;
for HsUC = 1:yF3s
if dist(HsUC,3) > BCuq+1
break
end
HFvX = dist(HsUC,1);
ZFaZ = dist(HsUC,2);
path = T7jd(B,[tNlO(HFvX); tNlO(ZFaZ)], [rSII(HFvX); rSII(ZFaZ)], -YxFZ, BCuq, 2*YxFZ);
if size(path,1) > 0
W = [W; path];
B = dx3s(B,path,-YxFZ);
P0pr = 2;
edit = [1:(HFvX-1) (HFvX+1):(ZFaZ-1) (ZFaZ+1):BdmU];
tNlO = [tNlO(HFvX); tNlO(ZFaZ); tNlO(edit)];
rSII = [rSII(HFvX); rSII(ZFaZ); rSII(edit)];
break
else
end
end
if P0pr < 2
continue
end
for g_Np = 3:BdmU
[LFdA gAyR] = find(B == -YxFZ);
TxhE = size(LFdA,1);
yF3s = TxhE * (BdmU - P0pr);
uIQy = (1:TxhE*BdmU)';
ZFaZ=mod(uIQy-1,BdmU)+1;
HFvX=ceil(uIQy/BdmU);
y05c = (ZFaZ>P0pr);
HFvX = HFvX(y05c);
ZFaZ = ZFaZ(y05c);
CADa = abs(LFdA(HFvX)-tNlO(ZFaZ)) + abs(gAyR(HFvX)-rSII(ZFaZ));
dist = [HFvX,ZFaZ,CADa];
[CADa nn1W] = sort(dist(:,3));
dist = dist(nn1W,:);
FOa2 = false(BdmU,1);
ej96 = false;
for HsUC = 1:yF3s
if dist(HsUC,3) > BCuq+1
break
end
ZFaZ = dist(HsUC,2);
if FOa2(ZFaZ)
randperm(4);
continue
end
HFvX = dist(HsUC,1);
path = T7jd(B,[LFdA(HFvX); tNlO(ZFaZ)], [gAyR(HFvX); rSII(ZFaZ)], -YxFZ, BCuq, YxFZ);
FOa2(ZFaZ)=true;
if size(path,1) > 0
W = [W; path];
B = dx3s(B,path,-YxFZ);
P0pr = P0pr + 1;
ej96 = true;
tNlO([g_Np ZFaZ]) = tNlO([ZFaZ g_Np]);
rSII([g_Np ZFaZ]) = rSII([ZFaZ g_Np]);
break
end
end
if ~ej96
break
end
end
end
end
end
function [W B] = XRUu(B,W,ynil,dI5O)
[ulTm d80F] = ciOU(B,dI5O);
if d80F < 1, return, end
ulTm=sortrows(ulTm,-dI5O);
for Hxm_ = 1:d80F
YxFZ = ulTm(Hxm_,1);
TxhE = sum(B == -YxFZ);
if TxhE == 0
if ulTm(Hxm_,2) >= 2
[tNlO rSII] = find(B == YxFZ);
BdmU = size(tNlO,1);
yF3s = BdmU*(BdmU-1)*.5;
uIQy = (1:BdmU*BdmU)';
ZFaZ=mod(uIQy-1,BdmU)+1;
HFvX=ceil(uIQy/BdmU);
y05c = (HFvX<ZFaZ);
HFvX = HFvX(y05c);
ZFaZ = ZFaZ(y05c);
CADa = abs(tNlO(HFvX)-tNlO(ZFaZ)) + abs(rSII(HFvX)-rSII(ZFaZ));
dist = [HFvX,ZFaZ,CADa];
[CADa nn1W] = sort(dist(:,3));
dist = dist(nn1W,:);
maxstep = min(ynil,2*YxFZ+1);
ej96 = false;
for HsUC = 1:yF3s
if dist(HsUC,3) > maxstep+1
break
end
HFvX = dist(HsUC,1);
ZFaZ = dist(HsUC,2);
path = T7jd(B,[tNlO(HFvX); tNlO(ZFaZ)], [rSII(HFvX); rSII(ZFaZ)], -YxFZ, ynil, 2*YxFZ);
if size(path,1) > 0
W = [W; path];
B = dx3s(B,path,-YxFZ);
ej96 = true;
break
end
end
if ~ej96
continue
end
end
end
[tNlO rSII] = find(B == YxFZ);
Hcc9 = size(tNlO,1);
maxstep = min(ynil,YxFZ+1);
for g_Np = 1:Hcc9
[LFdA gAyR] = find(B == -YxFZ);
TxhE = size(LFdA,1);
yF3s = TxhE * (Hcc9-g_Np+1);
dist = zeros(yF3s,3);
HsUC = 0;
for HFvX = 1:TxhE
for ZFaZ = g_Np:Hcc9
HsUC = HsUC + 1;
dist(HsUC,1) = HFvX;
dist(HsUC,2) = ZFaZ;
dist(HsUC,3) = abs(LFdA(HFvX)-tNlO(ZFaZ)) + abs(gAyR(HFvX)-rSII(ZFaZ));
end
end
[CADa nn1W] = sort(dist(:,3));
dist = dist(nn1W,:);
FOa2 = false(Hcc9,1);
ej96 = false;
for HsUC = 1:yF3s
if dist(HsUC,3) > maxstep+1
break
end
ZFaZ = dist(HsUC,2);
if FOa2(ZFaZ)
randperm(4);
continue
end
HFvX = dist(HsUC,1);
path = T7jd(B,[LFdA(HFvX); tNlO(ZFaZ)], [gAyR(HFvX); rSII(ZFaZ)], -YxFZ, ynil, 2*YxFZ);
FOa2(ZFaZ)=true;
if size(path,1) > 0
W = [W; path];
B = dx3s(B,path,-YxFZ);
ej96 = true;
tNlO([g_Np ZFaZ]) = tNlO([ZFaZ g_Np]);
rSII([g_Np ZFaZ]) = rSII([ZFaZ g_Np]);
break
end
end
if ~ej96
break
end
end
end
end
function [FKB0 jWgr] = vrxa(uOhj,B,path)
[sOPg K_y9] = size(B);
FKB0 = uOhj == 0;
jWgr = FKB0;
FKB0(:,[1 K_y9]) = false;
jWgr([1 sOPg],:) = false;
for Hxm_ = 1:size(path,1)
if path(Hxm_,1) == path(Hxm_,3)
FKB0(path(Hxm_,1),path(Hxm_,2)) = false;
FKB0(path(Hxm_,3),path(Hxm_,4)) = false;
end
if path(Hxm_,2) == path(Hxm_,4)
jWgr(path(Hxm_,1),path(Hxm_,2)) = false;
jWgr(path(Hxm_,3),path(Hxm_,4)) = false;
end
end
end
function B = dx3s(B,path,ImDv)
B(path(1,1),path(1,2)) = ImDv;
for Hxm_ = 1:size(path,1);
B(path(Hxm_,3),path(Hxm_,4)) = ImDv;
end
end
function path = n_G3(d6qu,trKZ,sOPg,Lm76)
path = zeros(Lm76,4);
Msjm = mod(d6qu,sOPg);
UiZw = ceil(d6qu/sOPg);
for g_Np = 1:Lm76
path(g_Np,1:2) = [Msjm UiZw];
d6qu = trKZ(d6qu);
Msjm = mod(d6qu,sOPg);
UiZw = ceil(d6qu/sOPg);
path(g_Np,3:4) = [Msjm UiZw];
end
end
function path = T7jd(B,tNlO,rSII,ImDv,BCuq,mZOE)
[sOPg K_y9] = size(B);
trKZ = zeros(sOPg,K_y9);
nltm = -ones(sOPg,K_y9);
nltm(tNlO(2),rSII(2)) = 0;
nltm(tNlO(1),rSII(1)) = -2;
nltm( B == ImDv ) = -2;
XAYx = zeros(sOPg*K_y9,1);
XAYx(1) = tNlO(2) + (rSII(2)-1)*sOPg;
count = 1;
cEiB = [-1 1 -sOPg sOPg];
uWNu = randperm(4);
for step = 0:min(BCuq,mZOE)
if count < 1, break, end
BdmU = count;
d6qu = XAYx;
count = 0;
for Hxm_ = 1:BdmU
TSYc = d6qu(Hxm_);
for vnEQ=1:4
EWHr = TSYc + cEiB(uWNu(vnEQ));
GYKa = nltm(EWHr);
if GYKa == -2
trKZ(EWHr) = TSYc;
path = n_G3(EWHr,trKZ,sOPg,step+1);
return
end
if GYKa == -1 && B(EWHr) == 0
nltm(EWHr) = step+1;
trKZ(EWHr) = TSYc;
count = count + 1;
XAYx(count) = EWHr;
end
end
end
end
path = [];
end
function path = xqn6(B,FKB0,jWgr,tNlO,rSII,ImDv,kdz8,ynil,mZOE)
[sOPg K_y9] = size(B);
R27s = false(sOPg,K_y9);
trKZ = zeros(sOPg,K_y9);
nltm = -ones(sOPg,K_y9);
nltm(tNlO(1),rSII(1)) = -2;
nltm( B == ImDv ) = -2;
maxstep = min((kdz8*27)+ynil,mZOE+1);
aIsP = zeros(maxstep+28,1);
aIsP(1) = tNlO(2) + (rSII(2)-1)*sOPg;
cEiB = [-sOPg sOPg -1 1];
for step = 1:maxstep
while aIsP(step)>0
TSYc = aIsP(step);
aIsP(step)=nltm(TSYc);
for vnEQ = 1:4
EWHr = TSYc + cEiB(vnEQ);
GYKa = nltm(EWHr);
if GYKa==-1
if B(EWHr) == 0
nltm(EWHr) = aIsP(step+1);
aIsP(step+1) = EWHr;
trKZ(EWHr) = TSYc;
elseif (FKB0(EWHr)&&(vnEQ<3)) || (jWgr(EWHr)&&(vnEQ>2))
nltm(EWHr) = aIsP(step+26);
aIsP(step+26) = EWHr;
trKZ(EWHr) = TSYc;
R27s(EWHr) = true;
end
end
if GYKa==-2
step=step+1;
trKZ(EWHr) = TSYc;
Msjm=mod(EWHr,sOPg);
UiZw=ceil(EWHr/sOPg);
path = zeros(step,4);
g_Np = 0;
while Msjm ~= tNlO(2) || UiZw ~= rSII(2)
g_Np = g_Np + 1;
path(g_Np,1:2) = [Msjm UiZw];
EWHr = Msjm + (UiZw-1)*sOPg;
Fl8h = trKZ(EWHr);
YNXD=mod(Fl8h,sOPg);
GJ8o=ceil(Fl8h/sOPg);
path(g_Np,3:4) = [YNXD GJ8o];
Msjm = YNXD;
UiZw = GJ8o;
if R27s(Msjm,UiZw)
g_Np = g_Np + 1;
path(g_Np,:) = [Msjm UiZw Msjm UiZw];
end
end
path = path(1:g_Np,:);
return
end
end
end
end
path = [];
end
function W = WY0q(B)
[W,jSuI] = B0gN(B);
kXgy = 0;
wI9h = round(mod(B(:),2));
if jSuI < 2100
return
end
[cnZ0,AIXx] = size(B);
B = flipud(fliplr(B'));
[N0XP,KrIA] = B0gN(B);
if jSuI > KrIA
W = [cnZ0-N0XP(:,2)+1 AIXx-N0XP(:,1)+1 cnZ0-N0XP(:,4)+1 AIXx-N0XP(:,3)+1];
end
if wI9h~=kXgy; W = zeros(0,4); end
end
function [W,jSuI] = B0gN(B)
[LtPW,fo1h]=size(B);
aisL=nan(LtPW+2,fo1h+2);
aisL(2:end-1,2:end-1)=B;
AnrP = aisL;
kdz8 = 4;
if size(AnrP,2) > 20
tOCB = 4;
Pspq = 8;
BCuq = 12;
else
tOCB = 3;
Pspq = 7;
BCuq = 11;
end
jSuI = inf;
rwEQ = [1 2;2 1];
wzEq = [1 3;3 1];
a11Y = [3 2 1;1 2 3];
for HsUC = 1:2
if HsUC == 2
[OzZf VY9l] = fJB3(AnrP,tOCB,rwEQ(HsUC,:));
[vSzv hm9_] = ji2Z(VY9l,OzZf,Pspq,wzEq(HsUC,:));
[CdAJ RpMJ] = ji2Z(hm9_,vSzv,BCuq,wzEq(HsUC,:));
else
[OzZf VY9l] = fJB3(AnrP,4,rwEQ(HsUC,:));
[CdAJ RpMJ] = ji2Z(VY9l,OzZf,11,wzEq(HsUC,:));
end
for Ajr5 = 1:2
if HsUC == 2 && Ajr5 == 2 && jSuI > 2100, return, end
TB69 = nXRQ(AnrP,RpMJ,CdAJ,kdz8,BCuq,a11Y(Ajr5,:))-1;
RZJ5 = tYbV(B,TB69);
if RZJ5 <= jSuI
jSuI = RZJ5;
W = TB69;
kdz8 = kdz8 - 1;
end
end
end
if LtPW*fo1h > 290; return; end
b6Kb = sum(W(:,1)==W(:,3)&W(:,2)==W(:,4));
if b6Kb <= 4
diJX = KE2e(B);
O8ss = tYbV(B,diJX);
if O8ss < jSuI
W = diJX;
jSuI = O8ss;
end
end
end
function path = ipeR(B,tNlO,rSII,ImDv,BCuq,mZOE)
function path = xFOZ(GaYD,gy61,yCFy)
ylDw(GaYD,gy61) = XHib(Hxm_);
uPTE(GaYD,gy61) = RQeb(Hxm_);
path = zeros(yCFy,4);
for S3Ys = 1:yCFy
path(S3Ys,1:2) = [GaYD gy61];
QbPy = ylDw(GaYD,gy61);
uEB0 = uPTE(GaYD,gy61);
path(S3Ys,3:4) = [QbPy uEB0];
GaYD = QbPy;
gy61 = uEB0;
end
end
[sOPg K_y9] = size(B);
ylDw = zeros(sOPg,K_y9);
uPTE = zeros(sOPg,K_y9);
nltm = -ones(sOPg,K_y9);
nltm(tNlO(2),rSII(2)) = 0;
nltm(tNlO(1),rSII(1)) = -2;
nltm( B == ImDv ) = -2;
t9qL = zeros(sOPg*K_y9,1);
wdX4 = zeros(sOPg*K_y9,1);
count = 1;
t9qL(1) = tNlO(2);
wdX4(1) = rSII(2);
g6BC=[-1 1 0 0];
nOwT=[0 0 -1 1];
for step = 0:min(BCuq,mZOE)
if count < 1, break, end
BdmU = count;
XHib = t9qL(1:BdmU);
RQeb = wdX4(1:BdmU);
count = 0;
for Hxm_ = 1:BdmU
jM_J = RQeb(Hxm_);
TSYc = XHib(Hxm_);
for vnEQ=1:4
GaYD = TSYc + g6BC(vnEQ);
gy61 = jM_J + nOwT(vnEQ);
EWHr = GaYD + (gy61-1)*sOPg;
GYKa = nltm(EWHr);
if GYKa == -2
path = xFOZ(GaYD,gy61,step+1);
return
elseif GYKa == -1 && B(EWHr) == 0
nltm(EWHr) = step+1;
ylDw(EWHr) = TSYc;
uPTE(EWHr) = jM_J;
count = count + 1; t9qL(count) = GaYD; wdX4(count) = gy61;
end
end
end
end
path = [];
end
function c0VU = KE2e(ZFaZ)
YxFZ = unique(ZFaZ);
YxFZ(1) = [];
a9GQ = zeros(size(YxFZ));
for Hxm_ = 1:length(a9GQ)
a9GQ(Hxm_) = nnz(YxFZ(Hxm_) == ZFaZ(:));
end
for Hxm_ = 1:length(a9GQ)
if a9GQ(Hxm_) == 1
ZFaZ(YxFZ(Hxm_) == ZFaZ(:)) = -1;
end
end
OsYX = zeros(size(ZFaZ)+2);
Bh_6 = repmat(-1,size(OsYX));
Bh_6(2:end-1,2:end-1) = ZFaZ;
c0VU = [];
[sgxZ, hKdp] = find(Bh_6>0);
CADa = (size(Bh_6,1)/2 - sgxZ).^2 + (size(Bh_6,2)/2 - hKdp).^2;
[CADa, order] = sort(CADa);
order = order';
for d80F = 1:length(sgxZ)-1
tJIU = 0;
geyv = 32;
for Hxm_ = order
if OsYX(sgxZ(Hxm_), hKdp(Hxm_))
continue
end
[X3nO, Dr_G, Hix4] = pQQS(Bh_6, OsYX, sgxZ(Hxm_), hKdp(Hxm_), geyv);
if X3nO > tJIU
tJIU = X3nO;
eTG0 = Dr_G;
geyv = Hix4;
if geyv == 1
break
end
end
end
if tJIU == 0
c0VU = c0VU - 1;
return
end
OsYX = dx3s(OsYX, eTG0, Bh_6(eTG0(1,1), eTG0(1,2)));
Bh_6 = dx3s(Bh_6, eTG0, Bh_6(eTG0(1,1), eTG0(1,2)));
c0VU = [c0VU; eTG0];
end
c0VU = c0VU - 1;
end
function [tJIU, eTG0, geyv] = pQQS(ZFaZ, OsYX, d6qu, RQeb, cj1H)
tJIU = 0;
eTG0 = [];
S3Ys = [1 -1 0 0];
d80F = [0 0 1 -1];
if ~any(OsYX(:)==ZFaZ(d6qu,RQeb))
OsYX = ZFaZ;
end
Bh_6 = ZFaZ;
Bh_6(Bh_6>0) = -1;
Bh_6(d6qu,RQeb) = 1;
geyv = Inf;
YxFZ = ZFaZ(d6qu,RQeb);
for Hxm_ = 1:cj1H-2
[sgxZ, hKdp] = find(Bh_6==Hxm_);
for a9GQ = 1:length(sgxZ)
for Zc5z = 1:4
sPmq = sgxZ(a9GQ) + S3Ys(Zc5z);
yv0Z = hKdp(a9GQ) + d80F(Zc5z);
if OsYX(sPmq,yv0Z) == YxFZ && ~(sPmq == d6qu && yv0Z == RQeb)
geyv = Hxm_;
break
end
JYeV = Bh_6(sPmq,yv0Z);
if JYeV == 0
Bh_6(sPmq,yv0Z) = Hxm_+1;
end
end
if geyv < Inf
break
end
end
if geyv < Inf
break
end
end
if geyv == Inf
return
end
tJIU = ZFaZ(d6qu,RQeb) - geyv;
if geyv == 1
eTG0 = [d6qu, RQeb, sPmq, yv0Z];
return
end
eTG0 = zeros(geyv,4);
for step = geyv:-1:1
for Zc5z = 1:4
DwaA = sPmq + S3Ys(Zc5z);
Ppld = yv0Z + d80F(Zc5z);
if Bh_6(DwaA, Ppld) == step
break
end
end
eTG0(step,:) = [DwaA, Ppld, sPmq, yv0Z];
sPmq = DwaA;
yv0Z = Ppld;
end
end
function [W B] = fJB3(B,BCuq,dI5O)
W = [];
[ulTm d80F] = ciOU(B,dI5O);
if d80F < 1
return
end
ulTm=sortrows(ulTm,-dI5O);
for Hxm_ = 1:d80F
if ulTm(Hxm_,2) >= 2
YxFZ = ulTm(Hxm_,1);
[tNlO rSII] = find(B == YxFZ);
BdmU = size(tNlO,1);
yF3s = BdmU*(BdmU-1)/2;
dist = zeros(yF3s,3);
HsUC = 0;
for HFvX = 1:BdmU
for ZFaZ = (HFvX+1):BdmU
HsUC = HsUC + 1;
dist(HsUC,1) = HFvX;
dist(HsUC,2) = ZFaZ;
dist(HsUC,3) = abs(tNlO(HFvX)-tNlO(ZFaZ)) + abs(rSII(HFvX)-rSII(ZFaZ));
end
end
[CADa nn1W] = sort(dist(:,3));
dist = dist(nn1W,:);
VRtP = reshape(dist(:,1:2)',[],1);
P0pr = 0;
KuoP = 1;
gBQl = false(BdmU,1);
for Hxm_=1:BdmU
NDxB = find( ~gBQl(VRtP(KuoP:end)) , 1 , 'first');
if isempty(NDxB)
break
end
HFvX = VRtP(NDxB);
Distance = abs(tNlO([1:HFvX-1,HFvX+1:end]')-tNlO(HFvX)) + abs(rSII([1:HFvX-1,HFvX+1:end]')-rSII(HFvX));
if max(Distance)>BCuq-1
break
end
path = H6_U(B,tNlO(HFvX),rSII(HFvX),tNlO([1:HFvX-1,HFvX+1:end]'),rSII([1:HFvX-1,HFvX+1:end]'), -YxFZ, BCuq, 2*YxFZ);
if size(path,1) > 0
W = [W; path];
B = dx3s(B,path,-YxFZ);
P0pr = 2;
break
end
end
if P0pr < 2
continue
end
for S3Ys = 3:BdmU
[LFdA gAyR] = find(B == -YxFZ);
[tNlO rSII] = find(B == YxFZ);
[PAXo,Dmtt] = meshgrid(tNlO,LFdA);
[Wxwq,F4Sk] = meshgrid(tNlO,LFdA);
Distance = abs(PAXo-Dmtt) + abs(Wxwq-F4Sk);
if max(Distance(:))>BCuq-1
break
end
path = H6_U(B,LFdA,gAyR,tNlO,rSII, -YxFZ, BCuq, 2*YxFZ);
if size(path,1) > 0
W = [W; path];
B = dx3s(B,path,-YxFZ);
ej96 = true;
else
break
end
end
end
end
end
function [W B] = ji2Z(B,W,iHWj,dI5O)
[ulTm d80F] = ciOU(B,dI5O);
if d80F < 1, return, end
ulTm=sortrows(ulTm,-dI5O);
for Hxm_ = 1:d80F
YxFZ = ulTm(Hxm_,1);
TxhE = sum(B == -YxFZ);
if TxhE == 0
if ulTm(Hxm_,2) >= 2
[tNlO rSII] = find(B == YxFZ);
BdmU = size(tNlO,1);
yF3s = BdmU*(BdmU-1)/2;
dist = zeros(yF3s,3);
HsUC = 0;
for HFvX = 1:BdmU
for ZFaZ = (HFvX+1):BdmU
HsUC = HsUC + 1;
dist(HsUC,1) = HFvX;
dist(HsUC,2) = ZFaZ;
dist(HsUC,3) = abs(tNlO(HFvX)-tNlO(ZFaZ)) + abs(rSII(HFvX)-rSII(ZFaZ));
end
end
[CADa nn1W] = sort(dist(:,3));
dist = dist(nn1W,:);
maxstep = min(iHWj,2*YxFZ+1);
ej96 = false;
for HsUC = 1:yF3s
if dist(HsUC,3) > maxstep+1
break
end
HFvX = dist(HsUC,1);
ZFaZ = dist(HsUC,2);
path = ipeR(B,[tNlO(HFvX); tNlO(ZFaZ)], [rSII(HFvX); rSII(ZFaZ)], -YxFZ, iHWj, 2*YxFZ);
if size(path,1) > 0
W = [W; path];
B = dx3s(B,path,-YxFZ);
ej96 = true;
break
end
end
if ~ej96
continue
end
end
end
[tNlO rSII] = find(B == YxFZ);
WfB5 = size(tNlO,1);
maxstep = min(iHWj,YxFZ+1);
for S3Ys = 1:WfB5
[LFdA gAyR] = find(B == -YxFZ);
[tNlO rSII] = find(B == YxFZ);
ej96 = false;
path = H6_U(B,LFdA,gAyR,tNlO,rSII, -YxFZ, iHWj, YxFZ);
if size(path,1) > 0
W = [W; path];
B = dx3s(B,path,-YxFZ);
ej96 = true;
end
if ~ej96
break
end
end
end
end
function [W B] = nXRQ(aisL,B,W,kdz8,iHWj,dI5O)
function HP_D()
for c0VU = 1:size(path,1);
if path(c0VU,1) == path(c0VU,3)
Ml8x(path(c0VU,1),path(c0VU,2)) = false;
Ml8x(path(c0VU,3),path(c0VU,4)) = false;
if path(c0VU,2) == path(c0VU,4)
B(path(c0VU,1),path(c0VU,2)) = -9999;
end
end
if path(c0VU,2) == path(c0VU,4)
dH3T(path(c0VU,1),path(c0VU,2)) = false;
dH3T(path(c0VU,3),path(c0VU,4)) = false;
end
end
end
[Ml8x dH3T] = vrxa(aisL,B,W);
[ulTm d80F] = ciOU(B,dI5O);
if d80F < 1, return, end
ulTm=sortrows(ulTm,-dI5O);
for Hxm_ = 1:d80F
YxFZ = ulTm(Hxm_,1);
TxhE = sum(B == -YxFZ);
if TxhE == 0
if ulTm(Hxm_,2) >= 2
[tNlO rSII] = find(B == YxFZ);
BdmU = size(tNlO,1);
yF3s = BdmU*(BdmU-1)/2;
dist = zeros(yF3s,3);
HsUC = 0;
for HFvX = 1:BdmU
for ZFaZ = (HFvX+1):BdmU
HsUC = HsUC + 1;
dist(HsUC,1) = HFvX;
dist(HsUC,2) = ZFaZ;
dist(HsUC,3) = abs(tNlO(HFvX)-tNlO(ZFaZ)) + abs(rSII(HFvX)-rSII(ZFaZ));
end
end
[CADa nn1W] = sort(dist(:,3));
dist = dist(nn1W,:);
maxstep = min((kdz8*25)+iHWj,2*YxFZ+1);
ej96 = false;
for HsUC = 1:yF3s
if dist(HsUC,3) > maxstep+1
break
end
HFvX = dist(HsUC,1);
ZFaZ = dist(HsUC,2);
path = xqn6(B,Ml8x,dH3T,[tNlO(HFvX); tNlO(ZFaZ)], [rSII(HFvX); rSII(ZFaZ)], -YxFZ, kdz8, iHWj, 2*YxFZ);
if size(path,1) > 0
W = [W; path];
B = dx3s(B,path,-YxFZ);
HP_D();
ej96 = true;
break
end
end
if ~ej96
continue
end
end
end
[tNlO rSII] = find(B == YxFZ);
WfB5 = size(tNlO,1);
maxstep = min((kdz8*25)+iHWj,YxFZ+1);
for S3Ys = 1:WfB5
[LFdA gAyR] = find(B == -YxFZ);
[tNlO rSII] = find(B == YxFZ);
ej96 = false;
path = wDI6(B,Ml8x,dH3T,LFdA,gAyR,tNlO,rSII, -YxFZ, kdz8, iHWj, YxFZ);
if size(path,1) > 0
W = [W; path];
B = dx3s(B,path,-YxFZ);
HP_D();
ej96 = true;
end
if ~ej96
break
end
end
end
end
function path = wDI6(B,FKB0,jWgr,rowS,colS,DeQN,lq5q,ImDv,kdz8,ynil,mZOE)
function path = n_G3(EWHr,step)
trKZ(EWHr) = TSYc;
path = zeros(step,4);
g_Np = 0;
OyHd = 0;
Ozz8 = zeros(step,1);
ms8s = zeros(step,1);
mSvG = zeros(step,1);
while isempty(find(oNTt==EWHr,1))
g_Np = g_Np + 1;
Ozz8(g_Np,1) = EWHr;
Fl8h = trKZ(EWHr);
ms8s(g_Np,1) = Fl8h;
EWHr = Fl8h;
if R27s(EWHr)
OyHd = OyHd + 1;
mSvG(OyHd,1) = EWHr;
end
end
Ozz8 = [ Ozz8(1:g_Np,:) ; mSvG(1:OyHd,1) ];
ms8s = [ ms8s(1:g_Np,:) ; mSvG(1:OyHd,1) ];
path = [ mod(Ozz8,sOPg) , ceil(Ozz8/sOPg) , mod(ms8s,sOPg) , ceil(ms8s/sOPg) ];
end
[sOPg K_y9] = size(B);
R27s = false(sOPg,K_y9);
trKZ = zeros(sOPg,K_y9);
nltm = -ones(sOPg,K_y9);
oNTt = rowS + (colS-1)*sOPg;
nltm(oNTt) = 0;
nltm(DeQN + (lq5q-1)*sOPg) = -2;
maxstep = min((kdz8*25)+ynil,mZOE+1);
vMuZ = zeros(maxstep+26,1);
vnXS = [-1 1];
for step = 0:maxstep
if step == 0
d6qu = oNTt;
elseif vMuZ(step) == 0
continue
else
d6qu = find(nltm == step);
end
BdmU = numel(d6qu);
for Hxm_ = 1:BdmU
TSYc = d6qu(Hxm_);
for ANNk = 1:2
EWHr = TSYc + vnXS(ANNk) * sOPg;
GYKa = nltm(EWHr);
if GYKa == -2
path = n_G3(EWHr,step+1);
return
elseif GYKa == -1
if B(EWHr) == 0
nltm(EWHr) = step+1; vMuZ(step+1) = 1;
trKZ(EWHr) = TSYc;
elseif FKB0(EWHr)
nltm(EWHr) = step+26; vMuZ(step+26) = 1;
trKZ(EWHr) = TSYc;
R27s(EWHr) = true;
end
end
end
for ANNk = 1:2
EWHr = TSYc + vnXS(ANNk);
GYKa = nltm(EWHr);
if GYKa == -2
path = n_G3(EWHr,step+1);
return
elseif GYKa == -1
if B(EWHr) == 0
nltm(EWHr) = step+1; vMuZ(step+1) = 1;
trKZ(EWHr) = TSYc;
elseif jWgr(EWHr)
nltm(EWHr) = step+26; vMuZ(step+26) = 1;
trKZ(EWHr) = TSYc;
R27s(EWHr) = true;
end
end
end
end
end
path = zeros(0,4);
end
function path = H6_U(B,rowS,colS,SHMW,el9f,ImDv,BCuq,mZOE)
[sOPg K_y9] = size(B);
ylDw = zeros(sOPg,K_y9);
uPTE = zeros(sOPg,K_y9);
nltm = -ones(sOPg,K_y9);
nltm(rowS+(colS-1)*sOPg) = 0;
nltm(SHMW+(el9f-1)*sOPg) = -2;
XAYx = zeros(sOPg*K_y9,1);
wdX4 = zeros(sOPg*K_y9,1);
count = numel(rowS);
XAYx(1:count) = rowS;
wdX4(1:count) = colS;
g6BC=[-1 1 0 0];
nOwT=[0 0 -1 1];
for step = 0:min(BCuq,mZOE)
if count < 1, break, end
BdmU = count;
XHib = XAYx(1:BdmU);
RQeb = wdX4(1:BdmU);
count = 0;
for Hxm_ = 1:BdmU
jM_J = RQeb(Hxm_);
TSYc = XHib(Hxm_);
for vnEQ=1:4
GaYD = TSYc + g6BC(vnEQ);
gy61 = jM_J + nOwT(vnEQ);
EWHr = GaYD + (gy61-1)*sOPg;
GYKa = nltm(EWHr);
if GYKa == -2
yCFy=step+1;
ylDw(GaYD,gy61) = XHib(Hxm_);
uPTE(GaYD,gy61) = RQeb(Hxm_);
path = zeros(yCFy,4);
for S3Ys = 1:yCFy
path(S3Ys,1:2) = [GaYD gy61];
QbPy = ylDw(GaYD,gy61);
uEB0 = uPTE(GaYD,gy61);
path(S3Ys,3:4) = [QbPy uEB0];
GaYD = QbPy;
gy61 = uEB0;
end
return
end
if GYKa == -1 && B(EWHr) == 0
nltm(EWHr) = step+1;
ylDw(EWHr) = TSYc;
uPTE(EWHr) = jM_J;
count = count + 1; XAYx(count) = GaYD; wdX4(count) = gy61;
end
end
end
end
path = [];
end
|