| Code: | function W = solv(B)
RD_e=31667;
AwVP = rand(43,1);
W=e2tL(B);
fOCn = NZfo(B,W);
[iE6s,L4Ck] = size(B);
QzwA = B(iE6s:-1:1,:);
QzwA = QzwA.';
[ye50,Lzg6] = oGGt(QzwA,[1 2],[1 2],4*iE6s*L4Ck);
if fOCn > Lzg6
W = [iE6s-ye50(:,2)+1 ye50(:,1) iE6s-ye50(:,4)+1 ye50(:,3)];
fOCn=Lzg6;
end
YFU3=rand('state');
rand(RD_e,1);
if fOCn>1000
[ye50,Lzg6] = oGGt(QzwA,[1 2],[1 2],4*iE6s*L4Ck);
if fOCn > Lzg6
W = [iE6s-ye50(:,2)+1 ye50(:,1) iE6s-ye50(:,4)+1 ye50(:,3)];
fOCn=Lzg6;
end
end
rand('state',YFU3);
end
function [W,fOCn] = oGGt(ZvhG,tjM2,bQKg,K9bK)
[yao5,ogz4]=size(ZvhG);
GoKe= -ones(yao5+2,ogz4+2);
GoKe(2:end-1,2:end-1)=ZvhG;
BePI = GoKe;
fEP5 = 4;
if size(BePI,2) > 20
jvx3 = 4;
ugZk = 8;
fv4p = 18;
else
jvx3 = 3;
ugZk = 7;
fv4p = 13;
end
fOCn = inf;
Tgys = [1 2;2 1];
ptgd = [1 3;3 1];
i8wR = [3 2 1;1 2 3];
for gyrE = tjM2
if gyrE == 2
[wBxP PfU4] = XwtM(BePI,jvx3,Tgys(gyrE,:));
[hdFd gopB] = LDTx(PfU4,wBxP,ugZk,ptgd(gyrE,:));
[aXO8 GE8z] = LDTx(gopB,hdFd,fv4p,ptgd(gyrE,:));
else
[wBxP PfU4] = XwtM(BePI,4,Tgys(gyrE,:));
[aXO8 GE8z] = LDTx(PfU4,wBxP,11,ptgd(gyrE,:));
end
for vxvf = bQKg
VppK = DbkR(BePI,GE8z,aXO8,fEP5,fv4p,i8wR(vxvf,:))-1;
tVBm = NZfo(ZvhG,VppK);
if tVBm <= fOCn
fOCn = tVBm;
W = VppK;
fEP5 = fEP5 - 1;
end
end
end
end
function ATh2 = NZfo(B,W)
yao5=size(B,1);
B(W(:,1)+(W(:,2)-1)*yao5)=0;
B(W(:,3)+(W(:,4)-1)*yao5)=0;
ATh2=sum(B(:))+size(W,1)+sum(W(:,1)==W(:,3)&W(:,2)==W(:,4))*24;
end
function [xD60 XM1q] = h8p4(B,b5Ly)
KsOQ = sort(B(B>0),'descend');
Tl2v = size(KsOQ,1);
if Tl2v < 1
xD60 = [];
XM1q = 0;
return
end
I3QY=KsOQ(diff([0;KsOQ])~=0);
xD60 = zeros(nnz(I3QY),3);
yDUb=histc(KsOQ,I3QY(end:-1:1));
xD60(:,1)=I3QY;
xD60(:,2)=yDUb(end:-1:1);
XM1q=nnz(I3QY);
if b5Ly < 3, return, end
for PlBQ = 1:XM1q
if xD60(PlBQ,2) >= 2
F2of = xD60(PlBQ,1);
[gzu7 pYk1] = find(B == F2of);
TeIP = 0;
zQns = size(gzu7,1);
TeIP=sum(abs(diff(gzu7))+abs(diff(pYk1)));
xD60(PlBQ,3) = xD60(PlBQ,2)*F2of - 0.85 * TeIP;
end
end
end
function [W B] = XwtM(B,fv4p,b5Ly)
W = [];
[xD60 XM1q] = h8p4(B,b5Ly);
if XM1q < 1
return
end
xD60=sortrows(xD60,-b5Ly);
for PlBQ = 1:XM1q
if xD60(PlBQ,2) >= 2
F2of = xD60(PlBQ,1);
[gzu7 pYk1] = find(B == F2of);
zQns = size(gzu7,1);
N0qW = zQns*(zQns-1)/2;
dist = zeros(N0qW,3);
[LZH2 sQN5]=find(tril(ones(zQns),-1));
dist(:,1)=sQN5;
dist(:,2)=LZH2;
dist(:,3)=abs(pYk1(LZH2)-pYk1(sQN5))+abs(gzu7(LZH2)-gzu7(sQN5));
[TeIP kS9N] = sort(dist(:,3));
dist = dist(kS9N,:);
Tl2v = 0;
for gyrE = 1:N0qW
if dist(gyrE,3) > fv4p+1
break
end
oC9c = dist(gyrE,1);
qUGz = dist(gyrE,2);
path = Uiep(B,[gzu7(oC9c); gzu7(qUGz)], [pYk1(oC9c); pYk1(qUGz)], -F2of, fv4p, 2*F2of);
if size(path,1) > 0
W = [W; path];
B = ZXyQ(B,path,-F2of);
Tl2v = 2;
edit = [1:(oC9c-1) (oC9c+1):(qUGz-1) (qUGz+1):zQns];
gzu7 = [gzu7(oC9c); gzu7(qUGz); gzu7(edit)];
pYk1 = [pYk1(oC9c); pYk1(qUGz); pYk1(edit)];
break
else
end
end
if Tl2v < 2
continue
end
for qnzB = 3:zQns
[BsKp mrYg] = find(B == -F2of);
STAN = size(BsKp,1);
N0qW = STAN * (zQns - Tl2v);
dist = zeros(N0qW,3);
gyrE = 0;
for oC9c = 1:STAN
for qUGz = (Tl2v+1):zQns
gyrE = gyrE + 1;
dist(gyrE,1) = oC9c;
dist(gyrE,2) = qUGz;
dist(gyrE,3) = abs(BsKp(oC9c)-gzu7(qUGz)) + abs(mrYg(oC9c)-pYk1(qUGz));
end
end
[TeIP kS9N] = sort(dist(:,3));
dist = dist(kS9N,:);
tLDv = false(zQns,1);
JVjm = false;
for gyrE = 1:N0qW
if dist(gyrE,3) > fv4p+1
break
end
qUGz = dist(gyrE,2);
if tLDv(qUGz)
randperm(4);
continue
end
oC9c = dist(gyrE,1);
path = Uiep(B,[BsKp(oC9c); gzu7(qUGz)], [mrYg(oC9c); pYk1(qUGz)], -F2of, fv4p, F2of);
tLDv(qUGz)=true;
if size(path,1) > 0
W = [W; path];
B = ZXyQ(B,path,-F2of);
Tl2v = Tl2v + 1;
JVjm = true;
gzu7([qnzB qUGz]) = gzu7([qUGz qnzB]);
pYk1([qnzB qUGz]) = pYk1([qUGz qnzB]);
break
end
end
if ~JVjm
break
end
end
end
end
end
function [W B] = LDTx(B,W,eQcO,b5Ly)
[xD60 XM1q] = h8p4(B,b5Ly);
if XM1q < 1, return, end
xD60=sortrows(xD60,-b5Ly);
for PlBQ = 1:XM1q
F2of = xD60(PlBQ,1);
STAN = sum(B == -F2of);
if STAN == 0
if xD60(PlBQ,2) >= 2
[gzu7 pYk1] = find(B == F2of);
zQns = size(gzu7,1);
N0qW = zQns*(zQns-1)*.5;
dist = zeros(N0qW,3);
gyrE = 0;
for oC9c = 1:zQns
for qUGz = (oC9c+1):zQns
gyrE = gyrE + 1;
dist(gyrE,1) = oC9c;
dist(gyrE,2) = qUGz;
dist(gyrE,3) = abs(gzu7(oC9c)-gzu7(qUGz)) + abs(pYk1(oC9c)-pYk1(qUGz));
end
end
[TeIP kS9N] = sort(dist(:,3));
dist = dist(kS9N,:);
maxstep = min(eQcO,2*F2of+1);
JVjm = false;
for gyrE = 1:N0qW
if dist(gyrE,3) > maxstep+1
break
end
oC9c = dist(gyrE,1);
qUGz = dist(gyrE,2);
path = Uiep(B,[gzu7(oC9c); gzu7(qUGz)], [pYk1(oC9c); pYk1(qUGz)], -F2of, eQcO, 2*F2of);
if size(path,1) > 0
W = [W; path];
B = ZXyQ(B,path,-F2of);
JVjm = true;
break
end
end
if ~JVjm
continue
end
end
end
[gzu7 pYk1] = find(B == F2of);
CEoe = size(gzu7,1);
maxstep = min(eQcO,F2of+1);
for qnzB = 1:CEoe
[BsKp mrYg] = find(B == -F2of);
STAN = size(BsKp,1);
N0qW = STAN * (CEoe-qnzB+1);
dist = zeros(N0qW,3);
gyrE = 0;
for oC9c = 1:STAN
for qUGz = qnzB:CEoe
gyrE = gyrE + 1;
dist(gyrE,1) = oC9c;
dist(gyrE,2) = qUGz;
dist(gyrE,3) = abs(BsKp(oC9c)-gzu7(qUGz)) + abs(mrYg(oC9c)-pYk1(qUGz));
end
end
[TeIP kS9N] = sort(dist(:,3));
dist = dist(kS9N,:);
tLDv = false(CEoe,1);
JVjm = false;
for gyrE = 1:N0qW
if dist(gyrE,3) > maxstep+1
break
end
qUGz = dist(gyrE,2);
if tLDv(qUGz)
randperm(4);
continue
end
oC9c = dist(gyrE,1);
path = Uiep(B,[BsKp(oC9c); gzu7(qUGz)], [mrYg(oC9c); pYk1(qUGz)], -F2of, eQcO, 2*F2of);
tLDv(qUGz)=true;
if size(path,1) > 0
W = [W; path];
B = ZXyQ(B,path,-F2of);
JVjm = true;
gzu7([qnzB qUGz]) = gzu7([qUGz qnzB]);
pYk1([qnzB qUGz]) = pYk1([qUGz qnzB]);
break
end
end
if ~JVjm
break
end
end
end
end
function [vMbG umFX] = gLy8(GoKe,B,path)
[Stug BhjX] = size(B);
vMbG = GoKe == 0;
umFX = vMbG;
vMbG(:,[1 BhjX]) = false;
umFX([1 Stug],:) = false;
for PlBQ = 1:size(path,1)
if path(PlBQ,1) == path(PlBQ,3)
vMbG(path(PlBQ,1),path(PlBQ,2)) = false;
vMbG(path(PlBQ,3),path(PlBQ,4)) = false;
end
if path(PlBQ,2) == path(PlBQ,4)
umFX(path(PlBQ,1),path(PlBQ,2)) = false;
umFX(path(PlBQ,3),path(PlBQ,4)) = false;
end
end
end
function B = ZXyQ(B,path,DNYn)
B(path(1,1),path(1,2)) = DNYn;
for PlBQ = 1:size(path,1);
B(path(PlBQ,3),path(PlBQ,4)) = DNYn;
end
end
function path = dk7y(sPr0,Kojf,Stug,WIhb)
path = zeros(WIhb,4);
of7C = mod(sPr0,Stug);
sR4p = ceil(sPr0/Stug);
for qnzB = 1:WIhb
path(qnzB,1:2) = [of7C sR4p];
sPr0 = Kojf(sPr0);
of7C = mod(sPr0,Stug);
sR4p = ceil(sPr0/Stug);
path(qnzB,3:4) = [of7C sR4p];
end
end
function path = Uiep(B,gzu7,pYk1,DNYn,fv4p,mEYo)
[Stug BhjX] = size(B);
Kojf = zeros(Stug,BhjX);
Upc4 = -ones(Stug,BhjX);
Upc4(gzu7(2),pYk1(2)) = 0;
Upc4(gzu7(1),pYk1(1)) = -2;
Upc4( B == DNYn ) = -2;
sGon = zeros(Stug*BhjX,1);
sGon(1) = gzu7(2) + (pYk1(2)-1)*Stug;
count = 1;
jyZW = [-1 1 -Stug Stug];
S8UQ = randperm(4);
for step = 0:min(fv4p,mEYo)
if count < 1, break, end
zQns = count;
sPr0 = sGon;
count = 0;
for PlBQ = 1:zQns
KLma = sPr0(PlBQ);
for tk5y=1:4
LBTq = KLma + jyZW(S8UQ(tk5y));
EqCf = Upc4(LBTq);
if EqCf == -2
Kojf(LBTq) = KLma;
path = dk7y(LBTq,Kojf,Stug,step+1);
return
end
if EqCf == -1 && B(LBTq) == 0
Upc4(LBTq) = step+1;
Kojf(LBTq) = KLma;
count = count + 1;
sGon(count) = LBTq;
end
end
end
end
path = [];
end
function path = OyS6(B,vMbG,umFX,gzu7,pYk1,DNYn,fEP5,eQcO,mEYo)
[Stug BhjX] = size(B);
t_1n = false(Stug,BhjX);
Kojf = zeros(Stug,BhjX);
Upc4 = -ones(Stug,BhjX);
Upc4(gzu7(1),pYk1(1)) = -2;
Upc4( B == DNYn ) = -2;
maxstep = min((fEP5*27)+eQcO,mEYo+1);
SIQe = zeros(maxstep+28,1);
SIQe(1) = gzu7(2) + (pYk1(2)-1)*Stug;
jyZW = [-Stug Stug -1 1];
for step = 1:maxstep
while SIQe(step)>0
KLma = SIQe(step);
SIQe(step)=Upc4(KLma);
for tk5y = 1:4
LBTq = KLma + jyZW(tk5y);
EqCf = Upc4(LBTq);
if EqCf==-1
if B(LBTq) == 0
Upc4(LBTq) = SIQe(step+1);
SIQe(step+1) = LBTq;
Kojf(LBTq) = KLma;
elseif (vMbG(LBTq)&&(tk5y<3)) || (umFX(LBTq)&&(tk5y>2))
Upc4(LBTq) = SIQe(step+26);
SIQe(step+26) = LBTq;
Kojf(LBTq) = KLma;
t_1n(LBTq) = true;
end
end
if EqCf==-2
step=step+1;
Kojf(LBTq) = KLma;
of7C=mod(LBTq,Stug);
sR4p=ceil(LBTq/Stug);
path = zeros(step,4);
qnzB = 0;
while of7C ~= gzu7(2) || sR4p ~= pYk1(2)
qnzB = qnzB + 1;
path(qnzB,1:2) = [of7C sR4p];
LBTq = of7C + (sR4p-1)*Stug;
cZp0 = Kojf(LBTq);
MS9c=mod(cZp0,Stug);
OR94=ceil(cZp0/Stug);
path(qnzB,3:4) = [MS9c OR94];
of7C = MS9c;
sR4p = OR94;
if t_1n(of7C,sR4p)
qnzB = qnzB + 1;
path(qnzB,:) = [of7C sR4p of7C sR4p];
end
end
path = path(1:qnzB,:);
return
end
end
end
end
path = [];
end
function W = e2tL(B)
[W,fOCn] = rTPB(B);
lHIi = 0;
OQWL = round(mod(B(:),2));
if fOCn < 2100
return
end
[eXzE,zasT] = size(B);
B = flipud(fliplr(B'));
[JOmr,nfDX] = rTPB(B);
if fOCn > nfDX
W = [eXzE-JOmr(:,2)+1 zasT-JOmr(:,1)+1 eXzE-JOmr(:,4)+1 zasT-JOmr(:,3)+1];
end
if OQWL~=lHIi; W = zeros(0,4); end
end
function [W,fOCn] = rTPB(B)
[yao5,ogz4]=size(B);
SaJD=nan(yao5+2,ogz4+2);
SaJD(2:end-1,2:end-1)=B;
BePI = SaJD;
fEP5 = 4;
if size(BePI,2) > 20
jvx3 = 4;
ugZk = 8;
fv4p = 12;
else
jvx3 = 3;
ugZk = 7;
fv4p = 11;
end
fOCn = inf;
Tgys = [1 2;2 1];
ptgd = [1 3;3 1];
i8wR = [3 2 1;1 2 3];
for gyrE = 1:2
if gyrE == 2
[wBxP PfU4] = L4Ln(BePI,jvx3,Tgys(gyrE,:));
[hdFd gopB] = mZjh(PfU4,wBxP,ugZk,ptgd(gyrE,:));
[aXO8 GE8z] = mZjh(gopB,hdFd,fv4p,ptgd(gyrE,:));
else
[wBxP PfU4] = L4Ln(BePI,4,Tgys(gyrE,:));
[aXO8 GE8z] = mZjh(PfU4,wBxP,11,ptgd(gyrE,:));
end
for vxvf = 1:2
if gyrE == 2 && vxvf == 2 && fOCn > 2100, return, end
VppK = DbkR(BePI,GE8z,aXO8,fEP5,fv4p,i8wR(vxvf,:))-1;
tVBm = NZfo(B,VppK);
if tVBm <= fOCn
fOCn = tVBm;
W = VppK;
fEP5 = fEP5 - 1;
end
end
end
if yao5*ogz4 > 290; return; end
B657 = sum(W(:,1)==W(:,3)&W(:,2)==W(:,4));
if B657 <= 4
e7cd = w7vW(B);
vzvY = NZfo(B,e7cd);
if vzvY < fOCn
W = e7cd;
fOCn = vzvY;
end
end
end
function path = rtJq(B,gzu7,pYk1,DNYn,fv4p,mEYo)
function path = DiV3(L4tM,GMUe,FX4Q)
aA3N(L4tM,GMUe) = M6Kw(PlBQ);
bhBi(L4tM,GMUe) = GLWA(PlBQ);
path = zeros(FX4Q,4);
for CrIY = 1:FX4Q
path(CrIY,1:2) = [L4tM GMUe];
i6JE = aA3N(L4tM,GMUe);
o1Sv = bhBi(L4tM,GMUe);
path(CrIY,3:4) = [i6JE o1Sv];
L4tM = i6JE;
GMUe = o1Sv;
end
end
[Stug BhjX] = size(B);
aA3N = zeros(Stug,BhjX);
bhBi = zeros(Stug,BhjX);
Upc4 = -ones(Stug,BhjX);
Upc4(gzu7(2),pYk1(2)) = 0;
Upc4(gzu7(1),pYk1(1)) = -2;
Upc4( B == DNYn ) = -2;
SC9F = zeros(Stug*BhjX,1);
nOoq = zeros(Stug*BhjX,1);
count = 1;
SC9F(1) = gzu7(2);
nOoq(1) = pYk1(2);
xsBv=[-1 1 0 0];
OKRV=[0 0 -1 1];
for step = 0:min(fv4p,mEYo)
if count < 1, break, end
zQns = count;
M6Kw = SC9F(1:zQns);
GLWA = nOoq(1:zQns);
count = 0;
for PlBQ = 1:zQns
NDKC = GLWA(PlBQ);
KLma = M6Kw(PlBQ);
for tk5y=1:4
L4tM = KLma + xsBv(tk5y);
GMUe = NDKC + OKRV(tk5y);
LBTq = L4tM + (GMUe-1)*Stug;
EqCf = Upc4(LBTq);
if EqCf == -2
path = DiV3(L4tM,GMUe,step+1);
return
elseif EqCf == -1 && B(LBTq) == 0
Upc4(LBTq) = step+1;
aA3N(LBTq) = KLma;
bhBi(LBTq) = NDKC;
count = count + 1; SC9F(count) = L4tM; nOoq(count) = GMUe;
end
end
end
end
path = [];
end
function W8S9 = w7vW(qUGz)
F2of = unique(qUGz);
F2of(1) = [];
jmTP = zeros(size(F2of));
for PlBQ = 1:length(jmTP)
jmTP(PlBQ) = nnz(F2of(PlBQ) == qUGz(:));
end
for PlBQ = 1:length(jmTP)
if jmTP(PlBQ) == 1
qUGz(F2of(PlBQ) == qUGz(:)) = -1;
end
end
CMXf = zeros(size(qUGz)+2);
spiY = repmat(-1,size(CMXf));
spiY(2:end-1,2:end-1) = qUGz;
W8S9 = [];
[J2kI, OBLF] = find(spiY>0);
TeIP = (size(spiY,1)/2 - J2kI).^2 + (size(spiY,2)/2 - OBLF).^2;
[TeIP, order] = sort(TeIP);
order = order';
for XM1q = 1:length(J2kI)-1
DqLq = 0;
lgNt = 32;
for PlBQ = order
if CMXf(J2kI(PlBQ), OBLF(PlBQ))
continue
end
[ATh2, fu9I, cY2W] = IFz8(spiY, CMXf, J2kI(PlBQ), OBLF(PlBQ), lgNt);
if ATh2 > DqLq
DqLq = ATh2;
uKzE = fu9I;
lgNt = cY2W;
if lgNt == 1
break
end
end
end
if DqLq == 0
W8S9 = W8S9 - 1;
return
end
CMXf = ZXyQ(CMXf, uKzE, spiY(uKzE(1,1), uKzE(1,2)));
spiY = ZXyQ(spiY, uKzE, spiY(uKzE(1,1), uKzE(1,2)));
W8S9 = [W8S9; uKzE];
end
W8S9 = W8S9 - 1;
end
function [DqLq, uKzE, lgNt] = IFz8(qUGz, CMXf, sPr0, GLWA, EyS_)
DqLq = 0;
uKzE = [];
CrIY = [1 -1 0 0];
XM1q = [0 0 1 -1];
if ~any(CMXf(:)==qUGz(sPr0,GLWA))
CMXf = qUGz;
end
spiY = qUGz;
spiY(spiY>0) = -1;
spiY(sPr0,GLWA) = 1;
lgNt = Inf;
F2of = qUGz(sPr0,GLWA);
for PlBQ = 1:EyS_-2
[J2kI, OBLF] = find(spiY==PlBQ);
for jmTP = 1:length(J2kI)
for tY9D = 1:4
khjI = J2kI(jmTP) + CrIY(tY9D);
kal7 = OBLF(jmTP) + XM1q(tY9D);
if CMXf(khjI,kal7) == F2of && ~(khjI == sPr0 && kal7 == GLWA)
lgNt = PlBQ;
break
end
lno1 = spiY(khjI,kal7);
if lno1 == 0
spiY(khjI,kal7) = PlBQ+1;
end
end
if lgNt < Inf
break
end
end
if lgNt < Inf
break
end
end
if lgNt == Inf
return
end
DqLq = qUGz(sPr0,GLWA) - lgNt;
if lgNt == 1
uKzE = [sPr0, GLWA, khjI, kal7];
return
end
uKzE = zeros(lgNt,4);
for step = lgNt:-1:1
for tY9D = 1:4
PGZC = khjI + CrIY(tY9D);
NvEP = kal7 + XM1q(tY9D);
if spiY(PGZC, NvEP) == step
break
end
end
uKzE(step,:) = [PGZC, NvEP, khjI, kal7];
khjI = PGZC;
kal7 = NvEP;
end
end
function [W B] = L4Ln(B,fv4p,b5Ly)
W = [];
[xD60 XM1q] = h8p4(B,b5Ly);
if XM1q < 1
return
end
xD60=sortrows(xD60,-b5Ly);
for PlBQ = 1:XM1q
if xD60(PlBQ,2) >= 2
F2of = xD60(PlBQ,1);
[gzu7 pYk1] = find(B == F2of);
zQns = size(gzu7,1);
N0qW = zQns*(zQns-1)/2;
dist = zeros(N0qW,3);
gyrE = 0;
for oC9c = 1:zQns
for qUGz = (oC9c+1):zQns
gyrE = gyrE + 1;
dist(gyrE,1) = oC9c;
dist(gyrE,2) = qUGz;
dist(gyrE,3) = abs(gzu7(oC9c)-gzu7(qUGz)) + abs(pYk1(oC9c)-pYk1(qUGz));
end
end
[TeIP kS9N] = sort(dist(:,3));
dist = dist(kS9N,:);
oWOA = reshape(dist(:,1:2)',[],1);
Tl2v = 0;
VmnU = 1;
QUVY = false(zQns,1);
for PlBQ=1:zQns
OQKt = find( ~QUVY(oWOA(VmnU:end)) , 1 , 'first');
if isempty(OQKt)
break
end
oC9c = oWOA(OQKt);
Distance = abs(gzu7([1:oC9c-1,oC9c+1:end]')-gzu7(oC9c)) + abs(pYk1([1:oC9c-1,oC9c+1:end]')-pYk1(oC9c));
if max(Distance)>fv4p-1
break
end
path = C33W(B,gzu7(oC9c),pYk1(oC9c),gzu7([1:oC9c-1,oC9c+1:end]'),pYk1([1:oC9c-1,oC9c+1:end]'), -F2of, fv4p, 2*F2of);
if size(path,1) > 0
W = [W; path];
B = ZXyQ(B,path,-F2of);
Tl2v = 2;
break
end
end
if Tl2v < 2
continue
end
for CrIY = 3:zQns
[BsKp mrYg] = find(B == -F2of);
[gzu7 pYk1] = find(B == F2of);
[pupi,rstj] = meshgrid(gzu7,BsKp);
[vDMV,MhZP] = meshgrid(gzu7,BsKp);
Distance = abs(pupi-rstj) + abs(vDMV-MhZP);
if max(Distance(:))>fv4p-1
break
end
path = C33W(B,BsKp,mrYg,gzu7,pYk1, -F2of, fv4p, 2*F2of);
if size(path,1) > 0
W = [W; path];
B = ZXyQ(B,path,-F2of);
JVjm = true;
else
break
end
end
end
end
end
function [W B] = mZjh(B,W,lze2,b5Ly)
[xD60 XM1q] = h8p4(B,b5Ly);
if XM1q < 1, return, end
xD60=sortrows(xD60,-b5Ly);
for PlBQ = 1:XM1q
F2of = xD60(PlBQ,1);
STAN = sum(B == -F2of);
if STAN == 0
if xD60(PlBQ,2) >= 2
[gzu7 pYk1] = find(B == F2of);
zQns = size(gzu7,1);
N0qW = zQns*(zQns-1)/2;
dist = zeros(N0qW,3);
gyrE = 0;
for oC9c = 1:zQns
for qUGz = (oC9c+1):zQns
gyrE = gyrE + 1;
dist(gyrE,1) = oC9c;
dist(gyrE,2) = qUGz;
dist(gyrE,3) = abs(gzu7(oC9c)-gzu7(qUGz)) + abs(pYk1(oC9c)-pYk1(qUGz));
end
end
[TeIP kS9N] = sort(dist(:,3));
dist = dist(kS9N,:);
maxstep = min(lze2,2*F2of+1);
JVjm = false;
for gyrE = 1:N0qW
if dist(gyrE,3) > maxstep+1
break
end
oC9c = dist(gyrE,1);
qUGz = dist(gyrE,2);
path = rtJq(B,[gzu7(oC9c); gzu7(qUGz)], [pYk1(oC9c); pYk1(qUGz)], -F2of, lze2, 2*F2of);
if size(path,1) > 0
W = [W; path];
B = ZXyQ(B,path,-F2of);
JVjm = true;
break
end
end
if ~JVjm
continue
end
end
end
[gzu7 pYk1] = find(B == F2of);
V21j = size(gzu7,1);
maxstep = min(lze2,F2of+1);
for CrIY = 1:V21j
[BsKp mrYg] = find(B == -F2of);
[gzu7 pYk1] = find(B == F2of);
JVjm = false;
path = C33W(B,BsKp,mrYg,gzu7,pYk1, -F2of, lze2, F2of);
if size(path,1) > 0
W = [W; path];
B = ZXyQ(B,path,-F2of);
JVjm = true;
end
if ~JVjm
break
end
end
end
end
function [W B] = DbkR(SaJD,B,W,fEP5,lze2,b5Ly)
function IhaQ()
for W8S9 = 1:size(path,1);
if path(W8S9,1) == path(W8S9,3)
OCV4(path(W8S9,1),path(W8S9,2)) = false;
OCV4(path(W8S9,3),path(W8S9,4)) = false;
if path(W8S9,2) == path(W8S9,4)
B(path(W8S9,1),path(W8S9,2)) = -9999;
end
end
if path(W8S9,2) == path(W8S9,4)
cWcq(path(W8S9,1),path(W8S9,2)) = false;
cWcq(path(W8S9,3),path(W8S9,4)) = false;
end
end
end
[OCV4 cWcq] = gLy8(SaJD,B,W);
[xD60 XM1q] = h8p4(B,b5Ly);
if XM1q < 1, return, end
xD60=sortrows(xD60,-b5Ly);
for PlBQ = 1:XM1q
F2of = xD60(PlBQ,1);
STAN = sum(B == -F2of);
if STAN == 0
if xD60(PlBQ,2) >= 2
[gzu7 pYk1] = find(B == F2of);
zQns = size(gzu7,1);
N0qW = zQns*(zQns-1)/2;
dist = zeros(N0qW,3);
gyrE = 0;
for oC9c = 1:zQns
for qUGz = (oC9c+1):zQns
gyrE = gyrE + 1;
dist(gyrE,1) = oC9c;
dist(gyrE,2) = qUGz;
dist(gyrE,3) = abs(gzu7(oC9c)-gzu7(qUGz)) + abs(pYk1(oC9c)-pYk1(qUGz));
end
end
[TeIP kS9N] = sort(dist(:,3));
dist = dist(kS9N,:);
maxstep = min((fEP5*25)+lze2,2*F2of+1);
JVjm = false;
for gyrE = 1:N0qW
if dist(gyrE,3) > maxstep+1
break
end
oC9c = dist(gyrE,1);
qUGz = dist(gyrE,2);
path = OyS6(B,OCV4,cWcq,[gzu7(oC9c); gzu7(qUGz)], [pYk1(oC9c); pYk1(qUGz)], -F2of, fEP5, lze2, 2*F2of);
if size(path,1) > 0
W = [W; path];
B = ZXyQ(B,path,-F2of);
IhaQ();
JVjm = true;
break
end
end
if ~JVjm
continue
end
end
end
[gzu7 pYk1] = find(B == F2of);
V21j = size(gzu7,1);
maxstep = min((fEP5*25)+lze2,F2of+1);
for CrIY = 1:V21j
[BsKp mrYg] = find(B == -F2of);
[gzu7 pYk1] = find(B == F2of);
JVjm = false;
path = FlxJ(B,OCV4,cWcq,BsKp,mrYg,gzu7,pYk1, -F2of, fEP5, lze2, F2of);
if size(path,1) > 0
W = [W; path];
B = ZXyQ(B,path,-F2of);
IhaQ();
JVjm = true;
end
if ~JVjm
break
end
end
end
end
function path = FlxJ(B,OCV4,cWcq,rowS,colS,ukfi,AdJn,DNYn,fEP5,lze2,mEYo)
[Stug BhjX] = size(B);
zmal = false(Stug,BhjX);
aBgE = zeros(Stug,BhjX);
Upc4 = -ones(Stug,BhjX);
Upc4(rowS + (colS-1)*Stug) = 0;
Upc4(ukfi + (AdJn-1)*Stug) = -2;
maxstep = min((fEP5*25)+lze2,mEYo+1);
W9DF = zeros(maxstep+26,1);
for step = 0:maxstep
if step == 0
zcIg = rowS + (colS-1)*Stug;
elseif W9DF(step) == 0
continue
else
zcIg = find(Upc4 == step);
end
zQns = numel(zcIg);
for PlBQ = 1:zQns
hUSY = zcIg(PlBQ);
LBTq = hUSY - Stug;
EqCf = Upc4(LBTq);
if EqCf == -2
step=step+1;
aBgE(LBTq) = hUSY;
L4tM=mod(LBTq,Stug);
GMUe=ceil(LBTq/Stug);
path = zeros(step,4);
CrIY = 0;
while isempty(find(rowS==L4tM & colS==GMUe,1))
CrIY = CrIY + 1;
path(CrIY,1:2) = [L4tM GMUe];
LBTq = L4tM + (GMUe-1)*Stug;
a1LA = aBgE(LBTq);
i6JE=mod(a1LA,Stug);
o1Sv=ceil(a1LA/Stug);
path(CrIY,3:4) = [i6JE o1Sv];
L4tM = i6JE;
GMUe = o1Sv;
if zmal(L4tM,GMUe)
CrIY = CrIY + 1;
path(CrIY,:) = [L4tM GMUe L4tM GMUe];
end
end
path = path(1:CrIY,:);
return
end
if EqCf == -1
if B(LBTq) == 0
Upc4(LBTq) = step+1; W9DF(step+1) = 1;
aBgE(LBTq) = hUSY;
elseif OCV4(LBTq)
Upc4(LBTq) = step+26; W9DF(step+26) = 1;
aBgE(LBTq) = hUSY;
zmal(LBTq) = true;
end
end
LBTq = hUSY + Stug;
EqCf = Upc4(LBTq);
if EqCf == -2
step=step+1;
aBgE(LBTq) = hUSY;
L4tM=mod(LBTq,Stug);
GMUe=ceil(LBTq/Stug);
path = zeros(step,4);
CrIY = 0;
while isempty(find(rowS==L4tM & colS==GMUe,1))
CrIY = CrIY + 1;
path(CrIY,1:2) = [L4tM GMUe];
LBTq = L4tM + (GMUe-1)*Stug;
a1LA = aBgE(LBTq);
i6JE=mod(a1LA,Stug);
o1Sv=ceil(a1LA/Stug);
path(CrIY,3:4) = [i6JE o1Sv];
L4tM = i6JE;
GMUe = o1Sv;
if zmal(L4tM,GMUe)
CrIY = CrIY + 1;
path(CrIY,:) = [L4tM GMUe L4tM GMUe];
end
end
path = path(1:CrIY,:);
return
end
if EqCf == -1
if B(LBTq) == 0
Upc4(LBTq) = step+1; W9DF(step+1) = 1;
aBgE(LBTq) = hUSY;
elseif OCV4(LBTq)
Upc4(LBTq) = step+26; W9DF(step+26) = 1;
aBgE(LBTq) = hUSY;
zmal(LBTq) = true;
end
end
LBTq = hUSY - 1;
EqCf = Upc4(LBTq);
if EqCf == -2
step=step+1;
aBgE(LBTq) = hUSY;
L4tM=mod(LBTq,Stug);
GMUe=ceil(LBTq/Stug);
path = zeros(step,4);
CrIY = 0;
while isempty(find(rowS==L4tM & colS==GMUe,1))
CrIY = CrIY + 1;
path(CrIY,1:2) = [L4tM GMUe];
LBTq = L4tM + (GMUe-1)*Stug;
a1LA = aBgE(LBTq);
i6JE=mod(a1LA,Stug);
o1Sv=ceil(a1LA/Stug);
path(CrIY,3:4) = [i6JE o1Sv];
L4tM = i6JE;
GMUe = o1Sv;
if zmal(L4tM,GMUe)
CrIY = CrIY + 1;
path(CrIY,:) = [L4tM GMUe L4tM GMUe];
end
end
path = path(1:CrIY,:);
return
end
if EqCf == -1
if B(LBTq) == 0
Upc4(LBTq) = step+1; W9DF(step+1) = 1;
aBgE(LBTq) = hUSY;
elseif cWcq(LBTq)
Upc4(LBTq) = step+26; W9DF(step+26) = 1;
aBgE(LBTq) = hUSY;
zmal(LBTq) = true;
end
end
LBTq = hUSY + 1;
EqCf = Upc4(LBTq);
if EqCf == -2
step=step+1;
aBgE(LBTq) = hUSY;
L4tM=mod(LBTq,Stug);
GMUe=ceil(LBTq/Stug);
path = zeros(step,4);
CrIY = 0;
while isempty(find(rowS==L4tM & colS==GMUe,1))
CrIY = CrIY + 1;
path(CrIY,1:2) = [L4tM GMUe];
LBTq = L4tM + (GMUe-1)*Stug;
a1LA = aBgE(LBTq);
i6JE=mod(a1LA,Stug);
o1Sv=ceil(a1LA/Stug);
path(CrIY,3:4) = [i6JE o1Sv];
L4tM = i6JE;
GMUe = o1Sv;
if zmal(L4tM,GMUe)
CrIY = CrIY + 1;
path(CrIY,:) = [L4tM GMUe L4tM GMUe];
end
end
path = path(1:CrIY,:);
return
end
if EqCf == -1
if B(LBTq) == 0
Upc4(LBTq) = step+1; W9DF(step+1) = 1;
aBgE(LBTq) = hUSY;
elseif cWcq(LBTq)
Upc4(LBTq) = step+26; W9DF(step+26) = 1;
aBgE(LBTq) = hUSY;
zmal(LBTq) = true;
end
end
end
end
path = zeros(0,4);
end
function path = C33W(B,rowS,colS,ukfi,AdJn,DNYn,fv4p,mEYo)
[Stug BhjX] = size(B);
aA3N = zeros(Stug,BhjX);
bhBi = zeros(Stug,BhjX);
Upc4 = -ones(Stug,BhjX);
Upc4(rowS+(colS-1)*Stug) = 0;
Upc4(ukfi+(AdJn-1)*Stug) = -2;
sGon = zeros(Stug*BhjX,1);
nOoq = zeros(Stug*BhjX,1);
count = numel(rowS);
sGon(1:count) = rowS;
nOoq(1:count) = colS;
xsBv=[-1 1 0 0];
OKRV=[0 0 -1 1];
for step = 0:min(fv4p,mEYo)
if count < 1, break, end
zQns = count;
M6Kw = sGon(1:zQns);
GLWA = nOoq(1:zQns);
count = 0;
for PlBQ = 1:zQns
NDKC = GLWA(PlBQ);
KLma = M6Kw(PlBQ);
for tk5y=1:4
L4tM = KLma + xsBv(tk5y);
GMUe = NDKC + OKRV(tk5y);
LBTq = L4tM + (GMUe-1)*Stug;
EqCf = Upc4(LBTq);
if EqCf == -2
FX4Q=step+1;
aA3N(L4tM,GMUe) = M6Kw(PlBQ);
bhBi(L4tM,GMUe) = GLWA(PlBQ);
path = zeros(FX4Q,4);
for CrIY = 1:FX4Q
path(CrIY,1:2) = [L4tM GMUe];
i6JE = aA3N(L4tM,GMUe);
o1Sv = bhBi(L4tM,GMUe);
path(CrIY,3:4) = [i6JE o1Sv];
L4tM = i6JE;
GMUe = o1Sv;
end
return
end
if EqCf == -1 && B(LBTq) == 0
Upc4(LBTq) = step+1;
aA3N(LBTq) = KLma;
bhBi(LBTq) = NDKC;
count = count + 1; sGon(count) = L4tM; nOoq(count) = GMUe;
end
end
end
end
path = [];
end
|