| Code: | function W = solv(B)
l1Hr=7118;
kHhd = rand(43,1);
W=iGSt(B);
KPjB = otjF(B,W);
[soba,nCwn] = size(B);
Ah56 = B(soba:-1:1,:);
Ah56 = Ah56.';
[mxxs,klzK] = PeWH(Ah56,[1 2],[1 2],4*soba*nCwn);
if KPjB > klzK
W = [soba-mxxs(:,2)+1 mxxs(:,1) soba-mxxs(:,4)+1 mxxs(:,3)];
KPjB=klzK;
end
TdmS=rand('state');
rand(l1Hr,1);
if KPjB>1000
[mxxs,klzK] = PeWH(Ah56,[1 2],[1 2],4*soba*nCwn);
if KPjB > klzK
W = [soba-mxxs(:,2)+1 mxxs(:,1) soba-mxxs(:,4)+1 mxxs(:,3)];
KPjB=klzK;
end
end
rand('state',TdmS);
end
function [W,KPjB] = PeWH(o71O,lWtz,Fx68,L3v9)
[WSXw,XnY0]=size(o71O);
U30I= -ones(WSXw+2,XnY0+2);
U30I(2:end-1,2:end-1)=o71O;
Y9Eu = U30I;
LSvJ = 4;
if size(Y9Eu,2) > 20
QOlK = 4;
kWCG = 8;
PN7g = 18;
else
QOlK = 3;
kWCG = 7;
PN7g = 13;
end
KPjB = inf;
chqP = [1 2;2 1];
dz30 = [1 3;3 1];
NlOg = [3 2 1;1 2 3];
for xqPw = lWtz
if xqPw == 2
[P1Tx xeLm] = XkMK(Y9Eu,QOlK,chqP(xqPw,:));
[egjk sXge] = PQ73(xeLm,P1Tx,kWCG,dz30(xqPw,:));
[xXGp eNxB] = PQ73(sXge,egjk,PN7g,dz30(xqPw,:));
else
[P1Tx xeLm] = XkMK(Y9Eu,4,chqP(xqPw,:));
[xXGp eNxB] = PQ73(xeLm,P1Tx,11,dz30(xqPw,:));
end
for lcBM = Fx68
YTrI = Ygqz(Y9Eu,eNxB,xXGp,LSvJ,PN7g,NlOg(lcBM,:))-1;
ZatI = otjF(o71O,YTrI);
if ZatI <= KPjB
KPjB = ZatI;
W = YTrI;
LSvJ = LSvJ - 1;
end
end
end
end
function T1Sr = otjF(B,W)
WSXw=size(B,1);
B(W(:,1)+(W(:,2)-1)*WSXw)=0;
B(W(:,3)+(W(:,4)-1)*WSXw)=0;
T1Sr=sum(B(:))+size(W,1)+sum(W(:,1)==W(:,3)&W(:,2)==W(:,4))*24;
end
function [TRxU Pqre] = Nhqy(B,KZP8)
dp_u = sort(B(B>0),'descend');
iscy = size(dp_u,1);
if iscy < 1
TRxU = [];
Pqre = 0;
return
end
W1z2=dp_u(diff([0;dp_u])~=0);
TRxU = zeros(nnz(W1z2),3);
DFXJ=histc(dp_u,W1z2(end:-1:1));
TRxU(:,1)=W1z2;
TRxU(:,2)=DFXJ(end:-1:1);
Pqre=nnz(W1z2);
if KZP8 < 3, return, end
for a6Sy = 1:Pqre
if TRxU(a6Sy,2) >= 2
pcD7 = TRxU(a6Sy,1);
[laQn NJzK] = find(B == pcD7);
PIET = 0;
KY47 = size(laQn,1);
PIET=sum(abs(diff(laQn))+abs(diff(NJzK)));
TRxU(a6Sy,3) = TRxU(a6Sy,2)*pcD7 - 0.85 * PIET;
end
end
end
function [W B] = XkMK(B,PN7g,KZP8)
W = [];
[TRxU Pqre] = Nhqy(B,KZP8);
if Pqre < 1
return
end
TRxU=sortrows(TRxU,-KZP8);
for a6Sy = 1:Pqre
if TRxU(a6Sy,2) >= 2
pcD7 = TRxU(a6Sy,1);
[laQn NJzK] = find(B == pcD7);
KY47 = size(laQn,1);
wJMV = KY47*(KY47-1)/2;
dist = zeros(wJMV,3);
[xXKL TKl9]=find(tril(ones(KY47),-1));
dist(:,1)=TKl9;
dist(:,2)=xXKL;
dist(:,3)=abs(NJzK(xXKL)-NJzK(TKl9))+abs(laQn(xXKL)-laQn(TKl9));
[PIET pyuj] = sort(dist(:,3));
dist = dist(pyuj,:);
iscy = 0;
for xqPw = 1:wJMV
if dist(xqPw,3) > PN7g+1
break
end
yhgE = dist(xqPw,1);
VN1Z = dist(xqPw,2);
path = SuYV(B,[laQn(yhgE); laQn(VN1Z)], [NJzK(yhgE); NJzK(VN1Z)], -pcD7, PN7g, 2*pcD7);
if size(path,1) > 0
W = [W; path];
B = ahqr(B,path,-pcD7);
iscy = 2;
edit = [1:(yhgE-1) (yhgE+1):(VN1Z-1) (VN1Z+1):KY47];
laQn = [laQn(yhgE); laQn(VN1Z); laQn(edit)];
NJzK = [NJzK(yhgE); NJzK(VN1Z); NJzK(edit)];
break
else
end
end
if iscy < 2
continue
end
for QOne = 3:KY47
[N3EZ An6K] = find(B == -pcD7);
Ih6Y = size(N3EZ,1);
wJMV = Ih6Y * (KY47 - iscy);
BbRS = (1:Ih6Y*KY47)';
VN1Z=mod(BbRS-1,KY47)+1;
yhgE=ceil(BbRS/KY47);
qWY3 = (VN1Z>iscy);
yhgE = yhgE(qWY3);
VN1Z = VN1Z(qWY3);
PIET = abs(N3EZ(yhgE)-laQn(VN1Z)) + abs(An6K(yhgE)-NJzK(VN1Z));
dist = [yhgE,VN1Z,PIET];
[PIET pyuj] = sort(dist(:,3));
dist = dist(pyuj,:);
xLll = false(KY47,1);
Vm41 = false;
for xqPw = 1:wJMV
if dist(xqPw,3) > PN7g+1
break
end
VN1Z = dist(xqPw,2);
if xLll(VN1Z)
randperm(4);
continue
end
yhgE = dist(xqPw,1);
path = SuYV(B,[N3EZ(yhgE); laQn(VN1Z)], [An6K(yhgE); NJzK(VN1Z)], -pcD7, PN7g, pcD7);
xLll(VN1Z)=true;
if size(path,1) > 0
W = [W; path];
B = ahqr(B,path,-pcD7);
iscy = iscy + 1;
Vm41 = true;
laQn([QOne VN1Z]) = laQn([VN1Z QOne]);
NJzK([QOne VN1Z]) = NJzK([VN1Z QOne]);
break
end
end
if ~Vm41
break
end
end
end
end
end
function [W B] = PQ73(B,W,NBwc,KZP8)
[TRxU Pqre] = Nhqy(B,KZP8);
if Pqre < 1, return, end
TRxU=sortrows(TRxU,-KZP8);
for a6Sy = 1:Pqre
pcD7 = TRxU(a6Sy,1);
Ih6Y = sum(B == -pcD7);
if Ih6Y == 0
if TRxU(a6Sy,2) >= 2
[laQn NJzK] = find(B == pcD7);
KY47 = size(laQn,1);
wJMV = KY47*(KY47-1)*.5;
BbRS = (1:KY47*KY47)';
VN1Z=mod(BbRS-1,KY47)+1;
yhgE=ceil(BbRS/KY47);
qWY3 = (yhgE<VN1Z);
yhgE = yhgE(qWY3);
VN1Z = VN1Z(qWY3);
PIET = abs(laQn(yhgE)-laQn(VN1Z)) + abs(NJzK(yhgE)-NJzK(VN1Z));
dist = [yhgE,VN1Z,PIET];
[PIET pyuj] = sort(dist(:,3));
dist = dist(pyuj,:);
maxstep = min(NBwc,2*pcD7+1);
Vm41 = false;
for xqPw = 1:wJMV
if dist(xqPw,3) > maxstep+1
break
end
yhgE = dist(xqPw,1);
VN1Z = dist(xqPw,2);
path = SuYV(B,[laQn(yhgE); laQn(VN1Z)], [NJzK(yhgE); NJzK(VN1Z)], -pcD7, NBwc, 2*pcD7);
if size(path,1) > 0
W = [W; path];
B = ahqr(B,path,-pcD7);
Vm41 = true;
break
end
end
if ~Vm41
continue
end
end
end
[laQn NJzK] = find(B == pcD7);
zYVJ = size(laQn,1);
maxstep = min(NBwc,pcD7+1);
for QOne = 1:zYVJ
[N3EZ An6K] = find(B == -pcD7);
Ih6Y = size(N3EZ,1);
wJMV = Ih6Y * (zYVJ-QOne+1);
dist = zeros(wJMV,3);
xqPw = 0;
for yhgE = 1:Ih6Y
for VN1Z = QOne:zYVJ
xqPw = xqPw + 1;
dist(xqPw,1) = yhgE;
dist(xqPw,2) = VN1Z;
dist(xqPw,3) = abs(N3EZ(yhgE)-laQn(VN1Z)) + abs(An6K(yhgE)-NJzK(VN1Z));
end
end
[PIET pyuj] = sort(dist(:,3));
dist = dist(pyuj,:);
xLll = false(zYVJ,1);
Vm41 = false;
for xqPw = 1:wJMV
if dist(xqPw,3) > maxstep+1
break
end
VN1Z = dist(xqPw,2);
if xLll(VN1Z)
randperm(4);
continue
end
yhgE = dist(xqPw,1);
path = SuYV(B,[N3EZ(yhgE); laQn(VN1Z)], [An6K(yhgE); NJzK(VN1Z)], -pcD7, NBwc, 2*pcD7);
xLll(VN1Z)=true;
if size(path,1) > 0
W = [W; path];
B = ahqr(B,path,-pcD7);
Vm41 = true;
laQn([QOne VN1Z]) = laQn([VN1Z QOne]);
NJzK([QOne VN1Z]) = NJzK([VN1Z QOne]);
break
end
end
if ~Vm41
break
end
end
end
end
function [lAU_ Joab] = WD9S(U30I,B,path)
[hywq f2LE] = size(B);
lAU_ = U30I == 0;
Joab = lAU_;
lAU_(:,[1 f2LE]) = false;
Joab([1 hywq],:) = false;
for a6Sy = 1:size(path,1)
if path(a6Sy,1) == path(a6Sy,3)
lAU_(path(a6Sy,1),path(a6Sy,2)) = false;
lAU_(path(a6Sy,3),path(a6Sy,4)) = false;
end
if path(a6Sy,2) == path(a6Sy,4)
Joab(path(a6Sy,1),path(a6Sy,2)) = false;
Joab(path(a6Sy,3),path(a6Sy,4)) = false;
end
end
end
function B = ahqr(B,path,TukM)
B(path(1,1),path(1,2)) = TukM;
for a6Sy = 1:size(path,1);
B(path(a6Sy,3),path(a6Sy,4)) = TukM;
end
end
function path = YJVq(HdKE,CLZb,hywq,Dany)
path = zeros(Dany,4);
ZgBt = mod(HdKE,hywq);
neeT = ceil(HdKE/hywq);
for QOne = 1:Dany
path(QOne,1:2) = [ZgBt neeT];
HdKE = CLZb(HdKE);
ZgBt = mod(HdKE,hywq);
neeT = ceil(HdKE/hywq);
path(QOne,3:4) = [ZgBt neeT];
end
end
function path = SuYV(B,laQn,NJzK,TukM,PN7g,nBUF)
[hywq f2LE] = size(B);
CLZb = zeros(hywq,f2LE);
D8E4 = -ones(hywq,f2LE);
D8E4(laQn(2),NJzK(2)) = 0;
D8E4(laQn(1),NJzK(1)) = -2;
D8E4( B == TukM ) = -2;
Md3K = zeros(hywq*f2LE,1);
Md3K(1) = laQn(2) + (NJzK(2)-1)*hywq;
count = 1;
JhG0 = [-1 1 -hywq hywq];
hdTS = randperm(4);
for step = 0:min(PN7g,nBUF)
if count < 1, break, end
KY47 = count;
HdKE = Md3K;
count = 0;
for a6Sy = 1:KY47
VKDk = HdKE(a6Sy);
for P5UB=1:4
cUY1 = VKDk + JhG0(hdTS(P5UB));
G79r = D8E4(cUY1);
if G79r == -2
CLZb(cUY1) = VKDk;
path = YJVq(cUY1,CLZb,hywq,step+1);
return
end
if G79r == -1 && B(cUY1) == 0
D8E4(cUY1) = step+1;
CLZb(cUY1) = VKDk;
count = count + 1;
Md3K(count) = cUY1;
end
end
end
end
path = [];
end
function path = lzN2(B,lAU_,Joab,laQn,NJzK,TukM,LSvJ,NBwc,nBUF)
[hywq f2LE] = size(B);
pm2L = false(hywq,f2LE);
CLZb = zeros(hywq,f2LE);
D8E4 = -ones(hywq,f2LE);
D8E4(laQn(1),NJzK(1)) = -2;
D8E4( B == TukM ) = -2;
maxstep = min((LSvJ*27)+NBwc,nBUF+1);
quPs = zeros(maxstep+28,1);
quPs(1) = laQn(2) + (NJzK(2)-1)*hywq;
JhG0 = [-hywq hywq -1 1];
for step = 1:maxstep
while quPs(step)>0
VKDk = quPs(step);
quPs(step)=D8E4(VKDk);
for P5UB = 1:4
cUY1 = VKDk + JhG0(P5UB);
G79r = D8E4(cUY1);
if G79r==-1
if B(cUY1) == 0
D8E4(cUY1) = quPs(step+1);
quPs(step+1) = cUY1;
CLZb(cUY1) = VKDk;
elseif (lAU_(cUY1)&&(P5UB<3)) || (Joab(cUY1)&&(P5UB>2))
D8E4(cUY1) = quPs(step+26);
quPs(step+26) = cUY1;
CLZb(cUY1) = VKDk;
pm2L(cUY1) = true;
end
end
if G79r==-2
step=step+1;
CLZb(cUY1) = VKDk;
ZgBt=mod(cUY1,hywq);
neeT=ceil(cUY1/hywq);
path = zeros(step,4);
QOne = 0;
while ZgBt ~= laQn(2) || neeT ~= NJzK(2)
QOne = QOne + 1;
path(QOne,1:2) = [ZgBt neeT];
cUY1 = ZgBt + (neeT-1)*hywq;
LuHl = CLZb(cUY1);
Bcn9=mod(LuHl,hywq);
Ilvk=ceil(LuHl/hywq);
path(QOne,3:4) = [Bcn9 Ilvk];
ZgBt = Bcn9;
neeT = Ilvk;
if pm2L(ZgBt,neeT)
QOne = QOne + 1;
path(QOne,:) = [ZgBt neeT ZgBt neeT];
end
end
path = path(1:QOne,:);
return
end
end
end
end
path = [];
end
function W = iGSt(B)
[W,KPjB] = iqfg(B);
psiD = 0;
hnY2 = round(mod(B(:),2));
if KPjB < 2100
return
end
[trt2,wwKk] = size(B);
B = flipud(fliplr(B'));
[UTt_,p7PX] = iqfg(B);
if KPjB > p7PX
W = [trt2-UTt_(:,2)+1 wwKk-UTt_(:,1)+1 trt2-UTt_(:,4)+1 wwKk-UTt_(:,3)+1];
end
if hnY2~=psiD; W = zeros(0,4); end
end
function [W,KPjB] = iqfg(B)
[WSXw,XnY0]=size(B);
dEsm=nan(WSXw+2,XnY0+2);
dEsm(2:end-1,2:end-1)=B;
Y9Eu = dEsm;
LSvJ = 4;
if size(Y9Eu,2) > 20
QOlK = 4;
kWCG = 8;
PN7g = 12;
else
QOlK = 3;
kWCG = 7;
PN7g = 11;
end
KPjB = inf;
chqP = [1 2;2 1];
dz30 = [1 3;3 1];
NlOg = [3 2 1;1 2 3];
for xqPw = 1:2
if xqPw == 2
[P1Tx xeLm] = nO5p(Y9Eu,QOlK,chqP(xqPw,:));
[egjk sXge] = Jjl7(xeLm,P1Tx,kWCG,dz30(xqPw,:));
[xXGp eNxB] = Jjl7(sXge,egjk,PN7g,dz30(xqPw,:));
else
[P1Tx xeLm] = nO5p(Y9Eu,4,chqP(xqPw,:));
[xXGp eNxB] = Jjl7(xeLm,P1Tx,11,dz30(xqPw,:));
end
for lcBM = 1:2
if xqPw == 2 && lcBM == 2 && KPjB > 2100, return, end
YTrI = Ygqz(Y9Eu,eNxB,xXGp,LSvJ,PN7g,NlOg(lcBM,:))-1;
ZatI = otjF(B,YTrI);
if ZatI <= KPjB
KPjB = ZatI;
W = YTrI;
LSvJ = LSvJ - 1;
end
end
end
if WSXw*XnY0 > 290; return; end
a2JY = sum(W(:,1)==W(:,3)&W(:,2)==W(:,4));
if a2JY <= 4
S3NK = Acj3(B);
fCsp = otjF(B,S3NK);
if fCsp < KPjB
W = S3NK;
KPjB = fCsp;
end
end
end
function path = toiV(B,laQn,NJzK,TukM,PN7g,nBUF)
function path = W_w3(Uls_,mAVu,zham)
utMd(Uls_,mAVu) = B1_V(a6Sy);
HgeU(Uls_,mAVu) = ve3j(a6Sy);
path = zeros(zham,4);
for SQaf = 1:zham
path(SQaf,1:2) = [Uls_ mAVu];
zGSs = utMd(Uls_,mAVu);
FMWd = HgeU(Uls_,mAVu);
path(SQaf,3:4) = [zGSs FMWd];
Uls_ = zGSs;
mAVu = FMWd;
end
end
[hywq f2LE] = size(B);
utMd = zeros(hywq,f2LE);
HgeU = zeros(hywq,f2LE);
D8E4 = -ones(hywq,f2LE);
D8E4(laQn(2),NJzK(2)) = 0;
D8E4(laQn(1),NJzK(1)) = -2;
D8E4( B == TukM ) = -2;
An8B = zeros(hywq*f2LE,1);
VF5H = zeros(hywq*f2LE,1);
count = 1;
An8B(1) = laQn(2);
VF5H(1) = NJzK(2);
N1VH=[-1 1 0 0];
sWtK=[0 0 -1 1];
for step = 0:min(PN7g,nBUF)
if count < 1, break, end
KY47 = count;
B1_V = An8B(1:KY47);
ve3j = VF5H(1:KY47);
count = 0;
for a6Sy = 1:KY47
Sy2X = ve3j(a6Sy);
VKDk = B1_V(a6Sy);
for P5UB=1:4
Uls_ = VKDk + N1VH(P5UB);
mAVu = Sy2X + sWtK(P5UB);
cUY1 = Uls_ + (mAVu-1)*hywq;
G79r = D8E4(cUY1);
if G79r == -2
path = W_w3(Uls_,mAVu,step+1);
return
elseif G79r == -1 && B(cUY1) == 0
D8E4(cUY1) = step+1;
utMd(cUY1) = VKDk;
HgeU(cUY1) = Sy2X;
count = count + 1; An8B(count) = Uls_; VF5H(count) = mAVu;
end
end
end
end
path = [];
end
function MvAh = Acj3(VN1Z)
pcD7 = unique(VN1Z);
pcD7(1) = [];
rSxj = zeros(size(pcD7));
for a6Sy = 1:length(rSxj)
rSxj(a6Sy) = nnz(pcD7(a6Sy) == VN1Z(:));
end
for a6Sy = 1:length(rSxj)
if rSxj(a6Sy) == 1
VN1Z(pcD7(a6Sy) == VN1Z(:)) = -1;
end
end
bt5U = zeros(size(VN1Z)+2);
mq6c = repmat(-1,size(bt5U));
mq6c(2:end-1,2:end-1) = VN1Z;
MvAh = [];
[sw8o, XBbO] = find(mq6c>0);
PIET = (size(mq6c,1)/2 - sw8o).^2 + (size(mq6c,2)/2 - XBbO).^2;
[PIET, order] = sort(PIET);
order = order';
for Pqre = 1:length(sw8o)-1
RT98 = 0;
PvSS = 32;
for a6Sy = order
if bt5U(sw8o(a6Sy), XBbO(a6Sy))
continue
end
[T1Sr, WHtO, YAfL] = uoC_(mq6c, bt5U, sw8o(a6Sy), XBbO(a6Sy), PvSS);
if T1Sr > RT98
RT98 = T1Sr;
bZFf = WHtO;
PvSS = YAfL;
if PvSS == 1
break
end
end
end
if RT98 == 0
MvAh = MvAh - 1;
return
end
bt5U = ahqr(bt5U, bZFf, mq6c(bZFf(1,1), bZFf(1,2)));
mq6c = ahqr(mq6c, bZFf, mq6c(bZFf(1,1), bZFf(1,2)));
MvAh = [MvAh; bZFf];
end
MvAh = MvAh - 1;
end
function [RT98, bZFf, PvSS] = uoC_(VN1Z, bt5U, HdKE, ve3j, L9bE)
RT98 = 0;
bZFf = [];
SQaf = [1 -1 0 0];
Pqre = [0 0 1 -1];
if ~any(bt5U(:)==VN1Z(HdKE,ve3j))
bt5U = VN1Z;
end
mq6c = VN1Z;
mq6c(mq6c>0) = -1;
mq6c(HdKE,ve3j) = 1;
PvSS = Inf;
pcD7 = VN1Z(HdKE,ve3j);
for a6Sy = 1:L9bE-2
[sw8o, XBbO] = find(mq6c==a6Sy);
for rSxj = 1:length(sw8o)
for Dlmy = 1:4
Kof1 = sw8o(rSxj) + SQaf(Dlmy);
MNxp = XBbO(rSxj) + Pqre(Dlmy);
if bt5U(Kof1,MNxp) == pcD7 && ~(Kof1 == HdKE && MNxp == ve3j)
PvSS = a6Sy;
break
end
ezTA = mq6c(Kof1,MNxp);
if ezTA == 0
mq6c(Kof1,MNxp) = a6Sy+1;
end
end
if PvSS < Inf
break
end
end
if PvSS < Inf
break
end
end
if PvSS == Inf
return
end
RT98 = VN1Z(HdKE,ve3j) - PvSS;
if PvSS == 1
bZFf = [HdKE, ve3j, Kof1, MNxp];
return
end
bZFf = zeros(PvSS,4);
for step = PvSS:-1:1
for Dlmy = 1:4
VlGG = Kof1 + SQaf(Dlmy);
dVN3 = MNxp + Pqre(Dlmy);
if mq6c(VlGG, dVN3) == step
break
end
end
bZFf(step,:) = [VlGG, dVN3, Kof1, MNxp];
Kof1 = VlGG;
MNxp = dVN3;
end
end
function [W B] = nO5p(B,PN7g,KZP8)
W = [];
[TRxU Pqre] = Nhqy(B,KZP8);
if Pqre < 1
return
end
TRxU=sortrows(TRxU,-KZP8);
for a6Sy = 1:Pqre
if TRxU(a6Sy,2) >= 2
pcD7 = TRxU(a6Sy,1);
[laQn NJzK] = find(B == pcD7);
KY47 = size(laQn,1);
wJMV = KY47*(KY47-1)/2;
dist = zeros(wJMV,3);
xqPw = 0;
for yhgE = 1:KY47
for VN1Z = (yhgE+1):KY47
xqPw = xqPw + 1;
dist(xqPw,1) = yhgE;
dist(xqPw,2) = VN1Z;
dist(xqPw,3) = abs(laQn(yhgE)-laQn(VN1Z)) + abs(NJzK(yhgE)-NJzK(VN1Z));
end
end
[PIET pyuj] = sort(dist(:,3));
dist = dist(pyuj,:);
Dv55 = reshape(dist(:,1:2)',[],1);
iscy = 0;
mgaW = 1;
AODs = false(KY47,1);
for a6Sy=1:KY47
DNVr = find( ~AODs(Dv55(mgaW:end)) , 1 , 'first');
if isempty(DNVr)
break
end
yhgE = Dv55(DNVr);
Distance = abs(laQn([1:yhgE-1,yhgE+1:end]')-laQn(yhgE)) + abs(NJzK([1:yhgE-1,yhgE+1:end]')-NJzK(yhgE));
if max(Distance)>PN7g-1
break
end
path = gJH9(B,laQn(yhgE),NJzK(yhgE),laQn([1:yhgE-1,yhgE+1:end]'),NJzK([1:yhgE-1,yhgE+1:end]'), -pcD7, PN7g, 2*pcD7);
if size(path,1) > 0
W = [W; path];
B = ahqr(B,path,-pcD7);
iscy = 2;
break
end
end
if iscy < 2
continue
end
for SQaf = 3:KY47
[N3EZ An6K] = find(B == -pcD7);
[laQn NJzK] = find(B == pcD7);
[wW0b,DS7z] = meshgrid(laQn,N3EZ);
[Dome,XtbW] = meshgrid(laQn,N3EZ);
Distance = abs(wW0b-DS7z) + abs(Dome-XtbW);
if max(Distance(:))>PN7g-1
break
end
path = gJH9(B,N3EZ,An6K,laQn,NJzK, -pcD7, PN7g, 2*pcD7);
if size(path,1) > 0
W = [W; path];
B = ahqr(B,path,-pcD7);
Vm41 = true;
else
break
end
end
end
end
end
function [W B] = Jjl7(B,W,Yo8K,KZP8)
[TRxU Pqre] = Nhqy(B,KZP8);
if Pqre < 1, return, end
TRxU=sortrows(TRxU,-KZP8);
for a6Sy = 1:Pqre
pcD7 = TRxU(a6Sy,1);
Ih6Y = sum(B == -pcD7);
if Ih6Y == 0
if TRxU(a6Sy,2) >= 2
[laQn NJzK] = find(B == pcD7);
KY47 = size(laQn,1);
wJMV = KY47*(KY47-1)/2;
dist = zeros(wJMV,3);
xqPw = 0;
for yhgE = 1:KY47
for VN1Z = (yhgE+1):KY47
xqPw = xqPw + 1;
dist(xqPw,1) = yhgE;
dist(xqPw,2) = VN1Z;
dist(xqPw,3) = abs(laQn(yhgE)-laQn(VN1Z)) + abs(NJzK(yhgE)-NJzK(VN1Z));
end
end
[PIET pyuj] = sort(dist(:,3));
dist = dist(pyuj,:);
maxstep = min(Yo8K,2*pcD7+1);
Vm41 = false;
for xqPw = 1:wJMV
if dist(xqPw,3) > maxstep+1
break
end
yhgE = dist(xqPw,1);
VN1Z = dist(xqPw,2);
path = toiV(B,[laQn(yhgE); laQn(VN1Z)], [NJzK(yhgE); NJzK(VN1Z)], -pcD7, Yo8K, 2*pcD7);
if size(path,1) > 0
W = [W; path];
B = ahqr(B,path,-pcD7);
Vm41 = true;
break
end
end
if ~Vm41
continue
end
end
end
[laQn NJzK] = find(B == pcD7);
Xmtj = size(laQn,1);
maxstep = min(Yo8K,pcD7+1);
for SQaf = 1:Xmtj
[N3EZ An6K] = find(B == -pcD7);
[laQn NJzK] = find(B == pcD7);
Vm41 = false;
path = gJH9(B,N3EZ,An6K,laQn,NJzK, -pcD7, Yo8K, pcD7);
if size(path,1) > 0
W = [W; path];
B = ahqr(B,path,-pcD7);
Vm41 = true;
end
if ~Vm41
break
end
end
end
end
function [W B] = Ygqz(dEsm,B,W,LSvJ,Yo8K,KZP8)
function Xdwv()
for MvAh = 1:size(path,1);
if path(MvAh,1) == path(MvAh,3)
cNy7(path(MvAh,1),path(MvAh,2)) = false;
cNy7(path(MvAh,3),path(MvAh,4)) = false;
if path(MvAh,2) == path(MvAh,4)
B(path(MvAh,1),path(MvAh,2)) = -9999;
end
end
if path(MvAh,2) == path(MvAh,4)
eQtz(path(MvAh,1),path(MvAh,2)) = false;
eQtz(path(MvAh,3),path(MvAh,4)) = false;
end
end
end
[cNy7 eQtz] = WD9S(dEsm,B,W);
[TRxU Pqre] = Nhqy(B,KZP8);
if Pqre < 1, return, end
TRxU=sortrows(TRxU,-KZP8);
for a6Sy = 1:Pqre
pcD7 = TRxU(a6Sy,1);
Ih6Y = sum(B == -pcD7);
if Ih6Y == 0
if TRxU(a6Sy,2) >= 2
[laQn NJzK] = find(B == pcD7);
KY47 = size(laQn,1);
wJMV = KY47*(KY47-1)/2;
dist = zeros(wJMV,3);
xqPw = 0;
for yhgE = 1:KY47
for VN1Z = (yhgE+1):KY47
xqPw = xqPw + 1;
dist(xqPw,1) = yhgE;
dist(xqPw,2) = VN1Z;
dist(xqPw,3) = abs(laQn(yhgE)-laQn(VN1Z)) + abs(NJzK(yhgE)-NJzK(VN1Z));
end
end
[PIET pyuj] = sort(dist(:,3));
dist = dist(pyuj,:);
maxstep = min((LSvJ*25)+Yo8K,2*pcD7+1);
Vm41 = false;
for xqPw = 1:wJMV
if dist(xqPw,3) > maxstep+1
break
end
yhgE = dist(xqPw,1);
VN1Z = dist(xqPw,2);
path = lzN2(B,cNy7,eQtz,[laQn(yhgE); laQn(VN1Z)], [NJzK(yhgE); NJzK(VN1Z)], -pcD7, LSvJ, Yo8K, 2*pcD7);
if size(path,1) > 0
W = [W; path];
B = ahqr(B,path,-pcD7);
Xdwv();
Vm41 = true;
break
end
end
if ~Vm41
continue
end
end
end
[laQn NJzK] = find(B == pcD7);
Xmtj = size(laQn,1);
maxstep = min((LSvJ*25)+Yo8K,pcD7+1);
for SQaf = 1:Xmtj
[N3EZ An6K] = find(B == -pcD7);
[laQn NJzK] = find(B == pcD7);
Vm41 = false;
path = ozph(B,cNy7,eQtz,N3EZ,An6K,laQn,NJzK, -pcD7, LSvJ, Yo8K, pcD7);
if size(path,1) > 0
W = [W; path];
B = ahqr(B,path,-pcD7);
Xdwv();
Vm41 = true;
end
if ~Vm41
break
end
end
end
end
function path = ozph(B,lAU_,Joab,rowS,colS,ggT_,El3r,TukM,LSvJ,NBwc,nBUF)
function path = YJVq(cUY1,step)
CLZb(cUY1) = VKDk;
path = zeros(step,4);
QOne = 0;
IODf = 0;
wIhA = zeros(step,1);
Tq_0 = zeros(step,1);
Wp9L = zeros(step,1);
while isempty(find(xdry==cUY1,1))
QOne = QOne + 1;
wIhA(QOne,1) = cUY1;
LuHl = CLZb(cUY1);
Tq_0(QOne,1) = LuHl;
cUY1 = LuHl;
if pm2L(cUY1)
IODf = IODf + 1;
Wp9L(IODf,1) = cUY1;
end
end
wIhA = [ wIhA(1:QOne,:) ; Wp9L(1:IODf,1) ];
Tq_0 = [ Tq_0(1:QOne,:) ; Wp9L(1:IODf,1) ];
path = [ mod(wIhA,hywq) , ceil(wIhA/hywq) , mod(Tq_0,hywq) , ceil(Tq_0/hywq) ];
end
[hywq f2LE] = size(B);
pm2L = false(hywq,f2LE);
CLZb = zeros(hywq,f2LE);
D8E4 = -ones(hywq,f2LE);
xdry = rowS + (colS-1)*hywq;
D8E4(xdry) = 0;
D8E4(ggT_ + (El3r-1)*hywq) = -2;
maxstep = min((LSvJ*25)+NBwc,nBUF+1);
Ieq1 = zeros(maxstep+26,1);
jeSz = [-1 1];
for step = 0:maxstep
if step == 0
HdKE = xdry;
elseif Ieq1(step) == 0
continue
else
HdKE = find(D8E4 == step);
end
KY47 = numel(HdKE);
for a6Sy = 1:KY47
VKDk = HdKE(a6Sy);
for M8vR = 1:2
cUY1 = VKDk + jeSz(M8vR) * hywq;
G79r = D8E4(cUY1);
if G79r == -2
path = YJVq(cUY1,step+1);
return
elseif G79r == -1
if B(cUY1) == 0
D8E4(cUY1) = step+1; Ieq1(step+1) = 1;
CLZb(cUY1) = VKDk;
elseif lAU_(cUY1)
D8E4(cUY1) = step+26; Ieq1(step+26) = 1;
CLZb(cUY1) = VKDk;
pm2L(cUY1) = true;
end
end
end
for M8vR = 1:2
cUY1 = VKDk + jeSz(M8vR);
G79r = D8E4(cUY1);
if G79r == -2
path = YJVq(cUY1,step+1);
return
elseif G79r == -1
if B(cUY1) == 0
D8E4(cUY1) = step+1; Ieq1(step+1) = 1;
CLZb(cUY1) = VKDk;
elseif Joab(cUY1)
D8E4(cUY1) = step+26; Ieq1(step+26) = 1;
CLZb(cUY1) = VKDk;
pm2L(cUY1) = true;
end
end
end
end
end
path = zeros(0,4);
end
function path = gJH9(B,rowS,colS,ebsj,s1tY,TukM,PN7g,nBUF)
[hywq f2LE] = size(B);
utMd = zeros(hywq,f2LE);
HgeU = zeros(hywq,f2LE);
D8E4 = -ones(hywq,f2LE);
D8E4(rowS+(colS-1)*hywq) = 0;
D8E4(ebsj+(s1tY-1)*hywq) = -2;
Md3K = zeros(hywq*f2LE,1);
VF5H = zeros(hywq*f2LE,1);
count = numel(rowS);
Md3K(1:count) = rowS;
VF5H(1:count) = colS;
N1VH=[-1 1 0 0];
sWtK=[0 0 -1 1];
for step = 0:min(PN7g,nBUF)
if count < 1, break, end
KY47 = count;
B1_V = Md3K(1:KY47);
ve3j = VF5H(1:KY47);
count = 0;
for a6Sy = 1:KY47
Sy2X = ve3j(a6Sy);
VKDk = B1_V(a6Sy);
for P5UB=1:4
Uls_ = VKDk + N1VH(P5UB);
mAVu = Sy2X + sWtK(P5UB);
cUY1 = Uls_ + (mAVu-1)*hywq;
G79r = D8E4(cUY1);
if G79r == -2
zham=step+1;
utMd(Uls_,mAVu) = B1_V(a6Sy);
HgeU(Uls_,mAVu) = ve3j(a6Sy);
path = zeros(zham,4);
for SQaf = 1:zham
path(SQaf,1:2) = [Uls_ mAVu];
zGSs = utMd(Uls_,mAVu);
FMWd = HgeU(Uls_,mAVu);
path(SQaf,3:4) = [zGSs FMWd];
Uls_ = zGSs;
mAVu = FMWd;
end
return
end
if G79r == -1 && B(cUY1) == 0
D8E4(cUY1) = step+1;
utMd(cUY1) = VKDk;
HgeU(cUY1) = Sy2X;
count = count + 1; Md3K(count) = Uls_; VF5H(count) = mAVu;
end
end
end
end
path = [];
end
|