| Code: | function W = solv(B)
Nj_6=40617;
MRxj = rand(43,1);
W=jYAj(B);
kDbn = FLSK(B,W);
[sAwA,sgiv] = size(B);
dMvj = B(sAwA:-1:1,:);
dMvj = dMvj.';
[n6s8,tMR3] = bC6u(dMvj,[1 2],[1 2],4*sAwA*sgiv);
if kDbn > tMR3
W = [sAwA-n6s8(:,2)+1 n6s8(:,1) sAwA-n6s8(:,4)+1 n6s8(:,3)];
kDbn=tMR3;
end
hSeZ=rand('state');
rand(Nj_6,1);
if kDbn>1000
[n6s8,tMR3] = bC6u(dMvj,[1 2],[1 2],4*sAwA*sgiv);
if kDbn > tMR3
W = [sAwA-n6s8(:,2)+1 n6s8(:,1) sAwA-n6s8(:,4)+1 n6s8(:,3)];
kDbn=tMR3;
end
end
rand('state',hSeZ);
end
function [W,kDbn] = bC6u(LhF9,DJym,cu8N,vA0I)
[Nq6J,O7Bu]=size(LhF9);
cYmP= -ones(Nq6J+2,O7Bu+2);
cYmP(2:end-1,2:end-1)=LhF9;
NZ1x = cYmP;
kXSc = 4;
if size(NZ1x,2) > 20
F2W_ = 4;
lWnB = 8;
VJpA = 18;
else
F2W_ = 3;
lWnB = 7;
VJpA = 13;
end
kDbn = inf;
s47m = [1 2;2 1];
X2eY = [1 3;3 1];
khir = [3 2 1;1 2 3];
for eQ__ = DJym
if eQ__ == 2
[c9Is hJ9C] = FkFE(NZ1x,F2W_,s47m(eQ__,:));
[yVAS ZMEI] = D7F8(hJ9C,c9Is,lWnB,X2eY(eQ__,:));
[g6OY I8Hm] = D7F8(ZMEI,yVAS,VJpA,X2eY(eQ__,:));
else
[c9Is hJ9C] = FkFE(NZ1x,4,s47m(eQ__,:));
[g6OY I8Hm] = D7F8(hJ9C,c9Is,11,X2eY(eQ__,:));
end
for vr3N = cu8N
k2HE = Ihi1(NZ1x,I8Hm,g6OY,kXSc,VJpA,khir(vr3N,:))-1;
NiNx = FLSK(LhF9,k2HE);
if NiNx <= kDbn
kDbn = NiNx;
W = k2HE;
kXSc = kXSc - 1;
end
end
end
end
function uis5 = FLSK(B,W)
Nq6J=size(B,1);
B(W(:,1)+(W(:,2)-1)*Nq6J)=0;
B(W(:,3)+(W(:,4)-1)*Nq6J)=0;
uis5=sum(B(:))+size(W,1)+sum(W(:,1)==W(:,3)&W(:,2)==W(:,4))*24;
end
function [HoTv ZqcS] = lBA0(B,K6jX)
EnhX = sort(B(B>0),'descend');
xFSz = size(EnhX,1);
if xFSz < 1
HoTv = [];
ZqcS = 0;
return
end
QWN5=EnhX(diff([0;EnhX])~=0);
HoTv = zeros(nnz(QWN5),3);
z3Qw=histc(EnhX,QWN5(end:-1:1));
HoTv(:,1)=QWN5;
HoTv(:,2)=z3Qw(end:-1:1);
ZqcS=nnz(QWN5);
if K6jX < 3, return, end
for zI4I = 1:ZqcS
if HoTv(zI4I,2) >= 2
WIz6 = HoTv(zI4I,1);
[qSqx zU8N] = find(B == WIz6);
kMO7 = 0;
zmNu = size(qSqx,1);
kMO7=sum(abs(diff(qSqx))+abs(diff(zU8N)));
HoTv(zI4I,3) = HoTv(zI4I,2)*WIz6 - 0.85 * kMO7;
end
end
end
function [W B] = FkFE(B,VJpA,K6jX)
W = [];
[HoTv ZqcS] = lBA0(B,K6jX);
if ZqcS < 1
return
end
HoTv=sortrows(HoTv,-K6jX);
for zI4I = 1:ZqcS
if HoTv(zI4I,2) >= 2
WIz6 = HoTv(zI4I,1);
[qSqx zU8N] = find(B == WIz6);
zmNu = size(qSqx,1);
t3ja = zmNu*(zmNu-1)/2;
dist = zeros(t3ja,3);
[h59N Fd3b]=find(tril(ones(zmNu),-1));
dist(:,1)=Fd3b;
dist(:,2)=h59N;
dist(:,3)=abs(zU8N(h59N)-zU8N(Fd3b))+abs(qSqx(h59N)-qSqx(Fd3b));
[kMO7 nnda] = sort(dist(:,3));
dist = dist(nnda,:);
xFSz = 0;
for eQ__ = 1:t3ja
if dist(eQ__,3) > VJpA+1
break
end
V7Jc = dist(eQ__,1);
c1Zf = dist(eQ__,2);
path = c32A(B,[qSqx(V7Jc); qSqx(c1Zf)], [zU8N(V7Jc); zU8N(c1Zf)], -WIz6, VJpA, 2*WIz6);
if size(path,1) > 0
W = [W; path];
B = HiNR(B,path,-WIz6);
xFSz = 2;
edit = [1:(V7Jc-1) (V7Jc+1):(c1Zf-1) (c1Zf+1):zmNu];
qSqx = [qSqx(V7Jc); qSqx(c1Zf); qSqx(edit)];
zU8N = [zU8N(V7Jc); zU8N(c1Zf); zU8N(edit)];
break
else
end
end
if xFSz < 2
continue
end
for B2Og = 3:zmNu
[JD76 cAKS] = find(B == -WIz6);
PnbN = size(JD76,1);
t3ja = PnbN * (zmNu - xFSz);
dist = zeros(t3ja,3);
eQ__ = 0;
for V7Jc = 1:PnbN
for c1Zf = (xFSz+1):zmNu
eQ__ = eQ__ + 1;
dist(eQ__,1) = V7Jc;
dist(eQ__,2) = c1Zf;
dist(eQ__,3) = abs(JD76(V7Jc)-qSqx(c1Zf)) + abs(cAKS(V7Jc)-zU8N(c1Zf));
end
end
[kMO7 nnda] = sort(dist(:,3));
dist = dist(nnda,:);
bYZl = false(zmNu,1);
CwmX = false;
for eQ__ = 1:t3ja
if dist(eQ__,3) > VJpA+1
break
end
c1Zf = dist(eQ__,2);
if bYZl(c1Zf)
randperm(4);
continue
end
V7Jc = dist(eQ__,1);
path = c32A(B,[JD76(V7Jc); qSqx(c1Zf)], [cAKS(V7Jc); zU8N(c1Zf)], -WIz6, VJpA, WIz6);
bYZl(c1Zf)=true;
if size(path,1) > 0
W = [W; path];
B = HiNR(B,path,-WIz6);
xFSz = xFSz + 1;
CwmX = true;
qSqx([B2Og c1Zf]) = qSqx([c1Zf B2Og]);
zU8N([B2Og c1Zf]) = zU8N([c1Zf B2Og]);
break
end
end
if ~CwmX
break
end
end
end
end
end
function [W B] = D7F8(B,W,YABm,K6jX)
[HoTv ZqcS] = lBA0(B,K6jX);
if ZqcS < 1, return, end
HoTv=sortrows(HoTv,-K6jX);
for zI4I = 1:ZqcS
WIz6 = HoTv(zI4I,1);
PnbN = sum(B == -WIz6);
if PnbN == 0
if HoTv(zI4I,2) >= 2
[qSqx zU8N] = find(B == WIz6);
zmNu = size(qSqx,1);
t3ja = zmNu*(zmNu-1)*.5;
dist = zeros(t3ja,3);
eQ__ = 0;
for V7Jc = 1:zmNu
for c1Zf = (V7Jc+1):zmNu
eQ__ = eQ__ + 1;
dist(eQ__,1) = V7Jc;
dist(eQ__,2) = c1Zf;
dist(eQ__,3) = abs(qSqx(V7Jc)-qSqx(c1Zf)) + abs(zU8N(V7Jc)-zU8N(c1Zf));
end
end
[kMO7 nnda] = sort(dist(:,3));
dist = dist(nnda,:);
maxstep = min(YABm,2*WIz6+1);
CwmX = false;
for eQ__ = 1:t3ja
if dist(eQ__,3) > maxstep+1
break
end
V7Jc = dist(eQ__,1);
c1Zf = dist(eQ__,2);
path = c32A(B,[qSqx(V7Jc); qSqx(c1Zf)], [zU8N(V7Jc); zU8N(c1Zf)], -WIz6, YABm, 2*WIz6);
if size(path,1) > 0
W = [W; path];
B = HiNR(B,path,-WIz6);
CwmX = true;
break
end
end
if ~CwmX
continue
end
end
end
[qSqx zU8N] = find(B == WIz6);
qm59 = size(qSqx,1);
maxstep = min(YABm,WIz6+1);
for B2Og = 1:qm59
[JD76 cAKS] = find(B == -WIz6);
PnbN = size(JD76,1);
t3ja = PnbN * (qm59-B2Og+1);
dist = zeros(t3ja,3);
eQ__ = 0;
for V7Jc = 1:PnbN
for c1Zf = B2Og:qm59
eQ__ = eQ__ + 1;
dist(eQ__,1) = V7Jc;
dist(eQ__,2) = c1Zf;
dist(eQ__,3) = abs(JD76(V7Jc)-qSqx(c1Zf)) + abs(cAKS(V7Jc)-zU8N(c1Zf));
end
end
[kMO7 nnda] = sort(dist(:,3));
dist = dist(nnda,:);
bYZl = false(qm59,1);
CwmX = false;
for eQ__ = 1:t3ja
if dist(eQ__,3) > maxstep+1
break
end
c1Zf = dist(eQ__,2);
if bYZl(c1Zf)
randperm(4);
continue
end
V7Jc = dist(eQ__,1);
path = c32A(B,[JD76(V7Jc); qSqx(c1Zf)], [cAKS(V7Jc); zU8N(c1Zf)], -WIz6, YABm, 2*WIz6);
bYZl(c1Zf)=true;
if size(path,1) > 0
W = [W; path];
B = HiNR(B,path,-WIz6);
CwmX = true;
qSqx([B2Og c1Zf]) = qSqx([c1Zf B2Og]);
zU8N([B2Og c1Zf]) = zU8N([c1Zf B2Og]);
break
end
end
if ~CwmX
break
end
end
end
end
function [bYdo T590] = jVc6(cYmP,B,path)
[Mx2v xEDR] = size(B);
bYdo = cYmP == 0;
T590 = bYdo;
bYdo(:,[1 xEDR]) = false;
T590([1 Mx2v],:) = false;
for zI4I = 1:size(path,1)
if path(zI4I,1) == path(zI4I,3)
bYdo(path(zI4I,1),path(zI4I,2)) = false;
bYdo(path(zI4I,3),path(zI4I,4)) = false;
end
if path(zI4I,2) == path(zI4I,4)
T590(path(zI4I,1),path(zI4I,2)) = false;
T590(path(zI4I,3),path(zI4I,4)) = false;
end
end
end
function B = HiNR(B,path,CCw3)
B(path(1,1),path(1,2)) = CCw3;
for zI4I = 1:size(path,1);
B(path(zI4I,3),path(zI4I,4)) = CCw3;
end
end
function path = Epsi(dnn1,lXvg,Mx2v,xREp)
path = zeros(xREp,4);
J4cs = mod(dnn1,Mx2v);
oGrh = ceil(dnn1/Mx2v);
for B2Og = 1:xREp
path(B2Og,1:2) = [J4cs oGrh];
dnn1 = lXvg(dnn1);
J4cs = mod(dnn1,Mx2v);
oGrh = ceil(dnn1/Mx2v);
path(B2Og,3:4) = [J4cs oGrh];
end
end
function path = c32A(B,qSqx,zU8N,CCw3,VJpA,sTZh)
[Mx2v xEDR] = size(B);
lXvg = zeros(Mx2v,xEDR);
g_cm = -ones(Mx2v,xEDR);
g_cm(qSqx(2),zU8N(2)) = 0;
g_cm(qSqx(1),zU8N(1)) = -2;
g_cm( B == CCw3 ) = -2;
bNZ0 = zeros(Mx2v*xEDR,1);
bNZ0(1) = qSqx(2) + (zU8N(2)-1)*Mx2v;
count = 1;
eDHr = [-1 1 -Mx2v Mx2v];
nXI5 = randperm(4);
for step = 0:min(VJpA,sTZh)
if count < 1, break, end
zmNu = count;
dnn1 = bNZ0;
count = 0;
for zI4I = 1:zmNu
YldY = dnn1(zI4I);
for ovOI=1:4
Nh5_ = YldY + eDHr(nXI5(ovOI));
bIs9 = g_cm(Nh5_);
if bIs9 == -2
lXvg(Nh5_) = YldY;
path = Epsi(Nh5_,lXvg,Mx2v,step+1);
return
end
if bIs9 == -1 && B(Nh5_) == 0
g_cm(Nh5_) = step+1;
lXvg(Nh5_) = YldY;
count = count + 1;
bNZ0(count) = Nh5_;
end
end
end
end
path = [];
end
function path = UGXX(B,bYdo,T590,qSqx,zU8N,CCw3,kXSc,YABm,sTZh)
[Mx2v xEDR] = size(B);
Y84t = false(Mx2v,xEDR);
lXvg = zeros(Mx2v,xEDR);
g_cm = -ones(Mx2v,xEDR);
g_cm(qSqx(1),zU8N(1)) = -2;
g_cm( B == CCw3 ) = -2;
maxstep = min((kXSc*27)+YABm,sTZh+1);
wOpZ = zeros(maxstep+28,1);
wOpZ(1) = qSqx(2) + (zU8N(2)-1)*Mx2v;
eDHr = [-Mx2v Mx2v -1 1];
for step = 1:maxstep
while wOpZ(step)>0
YldY = wOpZ(step);
wOpZ(step)=g_cm(YldY);
for ovOI = 1:4
Nh5_ = YldY + eDHr(ovOI);
bIs9 = g_cm(Nh5_);
if bIs9==-1
if B(Nh5_) == 0
g_cm(Nh5_) = wOpZ(step+1);
wOpZ(step+1) = Nh5_;
lXvg(Nh5_) = YldY;
elseif (bYdo(Nh5_)&&(ovOI<3)) || (T590(Nh5_)&&(ovOI>2))
g_cm(Nh5_) = wOpZ(step+26);
wOpZ(step+26) = Nh5_;
lXvg(Nh5_) = YldY;
Y84t(Nh5_) = true;
end
end
if bIs9==-2
step=step+1;
lXvg(Nh5_) = YldY;
J4cs=mod(Nh5_,Mx2v);
oGrh=ceil(Nh5_/Mx2v);
path = zeros(step,4);
B2Og = 0;
while J4cs ~= qSqx(2) || oGrh ~= zU8N(2)
B2Og = B2Og + 1;
path(B2Og,1:2) = [J4cs oGrh];
Nh5_ = J4cs + (oGrh-1)*Mx2v;
ztr9 = lXvg(Nh5_);
u7J3=mod(ztr9,Mx2v);
HBIE=ceil(ztr9/Mx2v);
path(B2Og,3:4) = [u7J3 HBIE];
J4cs = u7J3;
oGrh = HBIE;
if Y84t(J4cs,oGrh)
B2Og = B2Og + 1;
path(B2Og,:) = [J4cs oGrh J4cs oGrh];
end
end
path = path(1:B2Og,:);
return
end
end
end
end
path = [];
end
function W = jYAj(B)
[W,kDbn] = LM8m(B);
VDHE = 0;
ifi9 = round(mod(B(:),2));
if kDbn < 2100
return
end
[OVxQ,mkLF] = size(B);
B = flipud(fliplr(B'));
[O2DN,cYTR] = LM8m(B);
if kDbn > cYTR
W = [OVxQ-O2DN(:,2)+1 mkLF-O2DN(:,1)+1 OVxQ-O2DN(:,4)+1 mkLF-O2DN(:,3)+1];
end
if ifi9~=VDHE; W = zeros(0,4); end
end
function [W,kDbn] = LM8m(B)
[Nq6J,O7Bu]=size(B);
AQvl=nan(Nq6J+2,O7Bu+2);
AQvl(2:end-1,2:end-1)=B;
NZ1x = AQvl;
kXSc = 4;
if size(NZ1x,2) > 20
F2W_ = 4;
lWnB = 8;
VJpA = 12;
else
F2W_ = 3;
lWnB = 7;
VJpA = 11;
end
kDbn = inf;
s47m = [1 2;2 1];
X2eY = [1 3;3 1];
khir = [3 2 1;1 2 3];
for eQ__ = 1:2
if eQ__ == 2
[c9Is hJ9C] = S3xW(NZ1x,F2W_,s47m(eQ__,:));
[yVAS ZMEI] = O5lH(hJ9C,c9Is,lWnB,X2eY(eQ__,:));
[g6OY I8Hm] = O5lH(ZMEI,yVAS,VJpA,X2eY(eQ__,:));
else
[c9Is hJ9C] = S3xW(NZ1x,4,s47m(eQ__,:));
[g6OY I8Hm] = O5lH(hJ9C,c9Is,11,X2eY(eQ__,:));
end
for vr3N = 1:2
if eQ__ == 2 && vr3N == 2 && kDbn > 2100, return, end
k2HE = Ihi1(NZ1x,I8Hm,g6OY,kXSc,VJpA,khir(vr3N,:))-1;
NiNx = FLSK(B,k2HE);
if NiNx <= kDbn
kDbn = NiNx;
W = k2HE;
kXSc = kXSc - 1;
end
end
end
if Nq6J*O7Bu > 290; return; end
Kixj = sum(W(:,1)==W(:,3)&W(:,2)==W(:,4));
if Kixj <= 4
hjiM = VPIe(B);
D8D9 = FLSK(B,hjiM);
if D8D9 < kDbn
W = hjiM;
kDbn = D8D9;
end
end
end
function path = kgYf(B,qSqx,zU8N,CCw3,VJpA,sTZh)
function path = PnPZ(Z2SK,uaRQ,ZkWY)
fi1J(Z2SK,uaRQ) = ZgmH(zI4I);
ujHM(Z2SK,uaRQ) = bEnO(zI4I);
path = zeros(ZkWY,4);
for uEFO = 1:ZkWY
path(uEFO,1:2) = [Z2SK uaRQ];
Mnqa = fi1J(Z2SK,uaRQ);
v06O = ujHM(Z2SK,uaRQ);
path(uEFO,3:4) = [Mnqa v06O];
Z2SK = Mnqa;
uaRQ = v06O;
end
end
[Mx2v xEDR] = size(B);
fi1J = zeros(Mx2v,xEDR);
ujHM = zeros(Mx2v,xEDR);
g_cm = -ones(Mx2v,xEDR);
g_cm(qSqx(2),zU8N(2)) = 0;
g_cm(qSqx(1),zU8N(1)) = -2;
g_cm( B == CCw3 ) = -2;
kBAn = zeros(Mx2v*xEDR,1);
QrMH = zeros(Mx2v*xEDR,1);
count = 1;
kBAn(1) = qSqx(2);
QrMH(1) = zU8N(2);
yr6M=[-1 1 0 0];
A6Pg=[0 0 -1 1];
for step = 0:min(VJpA,sTZh)
if count < 1, break, end
zmNu = count;
ZgmH = kBAn(1:zmNu);
bEnO = QrMH(1:zmNu);
count = 0;
for zI4I = 1:zmNu
pZSY = bEnO(zI4I);
YldY = ZgmH(zI4I);
for ovOI=1:4
Z2SK = YldY + yr6M(ovOI);
uaRQ = pZSY + A6Pg(ovOI);
Nh5_ = Z2SK + (uaRQ-1)*Mx2v;
bIs9 = g_cm(Nh5_);
if bIs9 == -2
path = PnPZ(Z2SK,uaRQ,step+1);
return
elseif bIs9 == -1 && B(Nh5_) == 0
g_cm(Nh5_) = step+1;
fi1J(Nh5_) = YldY;
ujHM(Nh5_) = pZSY;
count = count + 1; kBAn(count) = Z2SK; QrMH(count) = uaRQ;
end
end
end
end
path = [];
end
function zjWQ = VPIe(c1Zf)
WIz6 = unique(c1Zf);
WIz6(1) = [];
b0da = zeros(size(WIz6));
for zI4I = 1:length(b0da)
b0da(zI4I) = nnz(WIz6(zI4I) == c1Zf(:));
end
for zI4I = 1:length(b0da)
if b0da(zI4I) == 1
c1Zf(WIz6(zI4I) == c1Zf(:)) = -1;
end
end
d1X_ = zeros(size(c1Zf)+2);
V2UY = repmat(-1,size(d1X_));
V2UY(2:end-1,2:end-1) = c1Zf;
zjWQ = [];
[c6pd, roA0] = find(V2UY>0);
kMO7 = (size(V2UY,1)/2 - c6pd).^2 + (size(V2UY,2)/2 - roA0).^2;
[kMO7, order] = sort(kMO7);
order = order';
for ZqcS = 1:length(c6pd)-1
qqc3 = 0;
njdQ = 32;
for zI4I = order
if d1X_(c6pd(zI4I), roA0(zI4I))
continue
end
[uis5, jSz3, HyOC] = OBOt(V2UY, d1X_, c6pd(zI4I), roA0(zI4I), njdQ);
if uis5 > qqc3
qqc3 = uis5;
aSQs = jSz3;
njdQ = HyOC;
if njdQ == 1
break
end
end
end
if qqc3 == 0
zjWQ = zjWQ - 1;
return
end
d1X_ = HiNR(d1X_, aSQs, V2UY(aSQs(1,1), aSQs(1,2)));
V2UY = HiNR(V2UY, aSQs, V2UY(aSQs(1,1), aSQs(1,2)));
zjWQ = [zjWQ; aSQs];
end
zjWQ = zjWQ - 1;
end
function [qqc3, aSQs, njdQ] = OBOt(c1Zf, d1X_, dnn1, bEnO, fw0B)
qqc3 = 0;
aSQs = [];
uEFO = [1 -1 0 0];
ZqcS = [0 0 1 -1];
if ~any(d1X_(:)==c1Zf(dnn1,bEnO))
d1X_ = c1Zf;
end
V2UY = c1Zf;
V2UY(V2UY>0) = -1;
V2UY(dnn1,bEnO) = 1;
njdQ = Inf;
WIz6 = c1Zf(dnn1,bEnO);
for zI4I = 1:fw0B-2
[c6pd, roA0] = find(V2UY==zI4I);
for b0da = 1:length(c6pd)
for iuMJ = 1:4
nZqJ = c6pd(b0da) + uEFO(iuMJ);
QldI = roA0(b0da) + ZqcS(iuMJ);
if d1X_(nZqJ,QldI) == WIz6 && ~(nZqJ == dnn1 && QldI == bEnO)
njdQ = zI4I;
break
end
J9uY = V2UY(nZqJ,QldI);
if J9uY == 0
V2UY(nZqJ,QldI) = zI4I+1;
end
end
if njdQ < Inf
break
end
end
if njdQ < Inf
break
end
end
if njdQ == Inf
return
end
qqc3 = c1Zf(dnn1,bEnO) - njdQ;
if njdQ == 1
aSQs = [dnn1, bEnO, nZqJ, QldI];
return
end
aSQs = zeros(njdQ,4);
for step = njdQ:-1:1
for iuMJ = 1:4
SLuI = nZqJ + uEFO(iuMJ);
enii = QldI + ZqcS(iuMJ);
if V2UY(SLuI, enii) == step
break
end
end
aSQs(step,:) = [SLuI, enii, nZqJ, QldI];
nZqJ = SLuI;
QldI = enii;
end
end
function [W B] = S3xW(B,VJpA,K6jX)
W = [];
[HoTv ZqcS] = lBA0(B,K6jX);
if ZqcS < 1
return
end
HoTv=sortrows(HoTv,-K6jX);
for zI4I = 1:ZqcS
if HoTv(zI4I,2) >= 2
WIz6 = HoTv(zI4I,1);
[qSqx zU8N] = find(B == WIz6);
zmNu = size(qSqx,1);
t3ja = zmNu*(zmNu-1)/2;
dist = zeros(t3ja,3);
eQ__ = 0;
for V7Jc = 1:zmNu
for c1Zf = (V7Jc+1):zmNu
eQ__ = eQ__ + 1;
dist(eQ__,1) = V7Jc;
dist(eQ__,2) = c1Zf;
dist(eQ__,3) = abs(qSqx(V7Jc)-qSqx(c1Zf)) + abs(zU8N(V7Jc)-zU8N(c1Zf));
end
end
[kMO7 nnda] = sort(dist(:,3));
dist = dist(nnda,:);
VqKG = reshape(dist(:,1:2)',[],1);
xFSz = 0;
qXy_ = 1;
zycF = false(zmNu,1);
for zI4I=1:zmNu
r5rP = find( ~zycF(VqKG(qXy_:end)) , 1 , 'first');
if isempty(r5rP)
break
end
V7Jc = VqKG(r5rP);
Distance = abs(qSqx([1:V7Jc-1,V7Jc+1:end]')-qSqx(V7Jc)) + abs(zU8N([1:V7Jc-1,V7Jc+1:end]')-zU8N(V7Jc));
if max(Distance)>VJpA-1
break
end
path = KJ4C(B,qSqx(V7Jc),zU8N(V7Jc),qSqx([1:V7Jc-1,V7Jc+1:end]'),zU8N([1:V7Jc-1,V7Jc+1:end]'), -WIz6, VJpA, 2*WIz6);
if size(path,1) > 0
W = [W; path];
B = HiNR(B,path,-WIz6);
xFSz = 2;
break
end
end
if xFSz < 2
continue
end
for uEFO = 3:zmNu
[JD76 cAKS] = find(B == -WIz6);
[qSqx zU8N] = find(B == WIz6);
[UMgr,tfll] = meshgrid(qSqx,JD76);
[cmCy,xH3l] = meshgrid(qSqx,JD76);
Distance = abs(UMgr-tfll) + abs(cmCy-xH3l);
if max(Distance(:))>VJpA-1
break
end
path = KJ4C(B,JD76,cAKS,qSqx,zU8N, -WIz6, VJpA, 2*WIz6);
if size(path,1) > 0
W = [W; path];
B = HiNR(B,path,-WIz6);
CwmX = true;
else
break
end
end
end
end
end
function [W B] = O5lH(B,W,FIUo,K6jX)
[HoTv ZqcS] = lBA0(B,K6jX);
if ZqcS < 1, return, end
HoTv=sortrows(HoTv,-K6jX);
for zI4I = 1:ZqcS
WIz6 = HoTv(zI4I,1);
PnbN = sum(B == -WIz6);
if PnbN == 0
if HoTv(zI4I,2) >= 2
[qSqx zU8N] = find(B == WIz6);
zmNu = size(qSqx,1);
t3ja = zmNu*(zmNu-1)/2;
dist = zeros(t3ja,3);
eQ__ = 0;
for V7Jc = 1:zmNu
for c1Zf = (V7Jc+1):zmNu
eQ__ = eQ__ + 1;
dist(eQ__,1) = V7Jc;
dist(eQ__,2) = c1Zf;
dist(eQ__,3) = abs(qSqx(V7Jc)-qSqx(c1Zf)) + abs(zU8N(V7Jc)-zU8N(c1Zf));
end
end
[kMO7 nnda] = sort(dist(:,3));
dist = dist(nnda,:);
maxstep = min(FIUo,2*WIz6+1);
CwmX = false;
for eQ__ = 1:t3ja
if dist(eQ__,3) > maxstep+1
break
end
V7Jc = dist(eQ__,1);
c1Zf = dist(eQ__,2);
path = kgYf(B,[qSqx(V7Jc); qSqx(c1Zf)], [zU8N(V7Jc); zU8N(c1Zf)], -WIz6, FIUo, 2*WIz6);
if size(path,1) > 0
W = [W; path];
B = HiNR(B,path,-WIz6);
CwmX = true;
break
end
end
if ~CwmX
continue
end
end
end
[qSqx zU8N] = find(B == WIz6);
Iing = size(qSqx,1);
maxstep = min(FIUo,WIz6+1);
for uEFO = 1:Iing
[JD76 cAKS] = find(B == -WIz6);
[qSqx zU8N] = find(B == WIz6);
CwmX = false;
path = KJ4C(B,JD76,cAKS,qSqx,zU8N, -WIz6, FIUo, WIz6);
if size(path,1) > 0
W = [W; path];
B = HiNR(B,path,-WIz6);
CwmX = true;
end
if ~CwmX
break
end
end
end
end
function [W B] = Ihi1(AQvl,B,W,kXSc,FIUo,K6jX)
function G9hM()
for zjWQ = 1:size(path,1);
if path(zjWQ,1) == path(zjWQ,3)
q8aj(path(zjWQ,1),path(zjWQ,2)) = false;
q8aj(path(zjWQ,3),path(zjWQ,4)) = false;
if path(zjWQ,2) == path(zjWQ,4)
B(path(zjWQ,1),path(zjWQ,2)) = -9999;
end
end
if path(zjWQ,2) == path(zjWQ,4)
NNQe(path(zjWQ,1),path(zjWQ,2)) = false;
NNQe(path(zjWQ,3),path(zjWQ,4)) = false;
end
end
end
[q8aj NNQe] = jVc6(AQvl,B,W);
[HoTv ZqcS] = lBA0(B,K6jX);
if ZqcS < 1, return, end
HoTv=sortrows(HoTv,-K6jX);
for zI4I = 1:ZqcS
WIz6 = HoTv(zI4I,1);
PnbN = sum(B == -WIz6);
if PnbN == 0
if HoTv(zI4I,2) >= 2
[qSqx zU8N] = find(B == WIz6);
zmNu = size(qSqx,1);
t3ja = zmNu*(zmNu-1)/2;
dist = zeros(t3ja,3);
eQ__ = 0;
for V7Jc = 1:zmNu
for c1Zf = (V7Jc+1):zmNu
eQ__ = eQ__ + 1;
dist(eQ__,1) = V7Jc;
dist(eQ__,2) = c1Zf;
dist(eQ__,3) = abs(qSqx(V7Jc)-qSqx(c1Zf)) + abs(zU8N(V7Jc)-zU8N(c1Zf));
end
end
[kMO7 nnda] = sort(dist(:,3));
dist = dist(nnda,:);
maxstep = min((kXSc*25)+FIUo,2*WIz6+1);
CwmX = false;
for eQ__ = 1:t3ja
if dist(eQ__,3) > maxstep+1
break
end
V7Jc = dist(eQ__,1);
c1Zf = dist(eQ__,2);
path = UGXX(B,q8aj,NNQe,[qSqx(V7Jc); qSqx(c1Zf)], [zU8N(V7Jc); zU8N(c1Zf)], -WIz6, kXSc, FIUo, 2*WIz6);
if size(path,1) > 0
W = [W; path];
B = HiNR(B,path,-WIz6);
G9hM();
CwmX = true;
break
end
end
if ~CwmX
continue
end
end
end
[qSqx zU8N] = find(B == WIz6);
Iing = size(qSqx,1);
maxstep = min((kXSc*25)+FIUo,WIz6+1);
for uEFO = 1:Iing
[JD76 cAKS] = find(B == -WIz6);
[qSqx zU8N] = find(B == WIz6);
CwmX = false;
path = lHl9(B,q8aj,NNQe,JD76,cAKS,qSqx,zU8N, -WIz6, kXSc, FIUo, WIz6);
if size(path,1) > 0
W = [W; path];
B = HiNR(B,path,-WIz6);
G9hM();
CwmX = true;
end
if ~CwmX
break
end
end
end
end
function path = lHl9(B,q8aj,NNQe,rowS,colS,vP4X,z7kn,CCw3,kXSc,FIUo,sTZh)
[Mx2v xEDR] = size(B);
PhqC = false(Mx2v,xEDR);
cqHi = zeros(Mx2v,xEDR);
g_cm = -ones(Mx2v,xEDR);
g_cm(rowS + (colS-1)*Mx2v) = 0;
g_cm(vP4X + (z7kn-1)*Mx2v) = -2;
maxstep = min((kXSc*25)+FIUo,sTZh+1);
WRHy = zeros(maxstep+26,1);
for step = 0:maxstep
if step == 0
BQ5z = rowS + (colS-1)*Mx2v;
elseif WRHy(step) == 0
continue
else
BQ5z = find(g_cm == step);
end
zmNu = numel(BQ5z);
for zI4I = 1:zmNu
uIiD = BQ5z(zI4I);
Nh5_ = uIiD - Mx2v;
bIs9 = g_cm(Nh5_);
if bIs9 == -2
step=step+1;
cqHi(Nh5_) = uIiD;
Z2SK=mod(Nh5_,Mx2v);
uaRQ=ceil(Nh5_/Mx2v);
path = zeros(step,4);
uEFO = 0;
while isempty(find(rowS==Z2SK & colS==uaRQ,1))
uEFO = uEFO + 1;
path(uEFO,1:2) = [Z2SK uaRQ];
Nh5_ = Z2SK + (uaRQ-1)*Mx2v;
fJeJ = cqHi(Nh5_);
Mnqa=mod(fJeJ,Mx2v);
v06O=ceil(fJeJ/Mx2v);
path(uEFO,3:4) = [Mnqa v06O];
Z2SK = Mnqa;
uaRQ = v06O;
if PhqC(Z2SK,uaRQ)
uEFO = uEFO + 1;
path(uEFO,:) = [Z2SK uaRQ Z2SK uaRQ];
end
end
path = path(1:uEFO,:);
return
end
if bIs9 == -1
if B(Nh5_) == 0
g_cm(Nh5_) = step+1; WRHy(step+1) = 1;
cqHi(Nh5_) = uIiD;
elseif q8aj(Nh5_)
g_cm(Nh5_) = step+26; WRHy(step+26) = 1;
cqHi(Nh5_) = uIiD;
PhqC(Nh5_) = true;
end
end
Nh5_ = uIiD + Mx2v;
bIs9 = g_cm(Nh5_);
if bIs9 == -2
step=step+1;
cqHi(Nh5_) = uIiD;
Z2SK=mod(Nh5_,Mx2v);
uaRQ=ceil(Nh5_/Mx2v);
path = zeros(step,4);
uEFO = 0;
while isempty(find(rowS==Z2SK & colS==uaRQ,1))
uEFO = uEFO + 1;
path(uEFO,1:2) = [Z2SK uaRQ];
Nh5_ = Z2SK + (uaRQ-1)*Mx2v;
fJeJ = cqHi(Nh5_);
Mnqa=mod(fJeJ,Mx2v);
v06O=ceil(fJeJ/Mx2v);
path(uEFO,3:4) = [Mnqa v06O];
Z2SK = Mnqa;
uaRQ = v06O;
if PhqC(Z2SK,uaRQ)
uEFO = uEFO + 1;
path(uEFO,:) = [Z2SK uaRQ Z2SK uaRQ];
end
end
path = path(1:uEFO,:);
return
end
if bIs9 == -1
if B(Nh5_) == 0
g_cm(Nh5_) = step+1; WRHy(step+1) = 1;
cqHi(Nh5_) = uIiD;
elseif q8aj(Nh5_)
g_cm(Nh5_) = step+26; WRHy(step+26) = 1;
cqHi(Nh5_) = uIiD;
PhqC(Nh5_) = true;
end
end
Nh5_ = uIiD - 1;
bIs9 = g_cm(Nh5_);
if bIs9 == -2
step=step+1;
cqHi(Nh5_) = uIiD;
Z2SK=mod(Nh5_,Mx2v);
uaRQ=ceil(Nh5_/Mx2v);
path = zeros(step,4);
uEFO = 0;
while isempty(find(rowS==Z2SK & colS==uaRQ,1))
uEFO = uEFO + 1;
path(uEFO,1:2) = [Z2SK uaRQ];
Nh5_ = Z2SK + (uaRQ-1)*Mx2v;
fJeJ = cqHi(Nh5_);
Mnqa=mod(fJeJ,Mx2v);
v06O=ceil(fJeJ/Mx2v);
path(uEFO,3:4) = [Mnqa v06O];
Z2SK = Mnqa;
uaRQ = v06O;
if PhqC(Z2SK,uaRQ)
uEFO = uEFO + 1;
path(uEFO,:) = [Z2SK uaRQ Z2SK uaRQ];
end
end
path = path(1:uEFO,:);
return
end
if bIs9 == -1
if B(Nh5_) == 0
g_cm(Nh5_) = step+1; WRHy(step+1) = 1;
cqHi(Nh5_) = uIiD;
elseif NNQe(Nh5_)
g_cm(Nh5_) = step+26; WRHy(step+26) = 1;
cqHi(Nh5_) = uIiD;
PhqC(Nh5_) = true;
end
end
Nh5_ = uIiD + 1;
bIs9 = g_cm(Nh5_);
if bIs9 == -2
step=step+1;
cqHi(Nh5_) = uIiD;
Z2SK=mod(Nh5_,Mx2v);
uaRQ=ceil(Nh5_/Mx2v);
path = zeros(step,4);
uEFO = 0;
while isempty(find(rowS==Z2SK & colS==uaRQ,1))
uEFO = uEFO + 1;
path(uEFO,1:2) = [Z2SK uaRQ];
Nh5_ = Z2SK + (uaRQ-1)*Mx2v;
fJeJ = cqHi(Nh5_);
Mnqa=mod(fJeJ,Mx2v);
v06O=ceil(fJeJ/Mx2v);
path(uEFO,3:4) = [Mnqa v06O];
Z2SK = Mnqa;
uaRQ = v06O;
if PhqC(Z2SK,uaRQ)
uEFO = uEFO + 1;
path(uEFO,:) = [Z2SK uaRQ Z2SK uaRQ];
end
end
path = path(1:uEFO,:);
return
end
if bIs9 == -1
if B(Nh5_) == 0
g_cm(Nh5_) = step+1; WRHy(step+1) = 1;
cqHi(Nh5_) = uIiD;
elseif NNQe(Nh5_)
g_cm(Nh5_) = step+26; WRHy(step+26) = 1;
cqHi(Nh5_) = uIiD;
PhqC(Nh5_) = true;
end
end
end
end
path = zeros(0,4);
end
function path = KJ4C(B,rowS,colS,vP4X,z7kn,CCw3,VJpA,sTZh)
[Mx2v xEDR] = size(B);
fi1J = zeros(Mx2v,xEDR);
ujHM = zeros(Mx2v,xEDR);
g_cm = -ones(Mx2v,xEDR);
g_cm(rowS+(colS-1)*Mx2v) = 0;
g_cm(vP4X+(z7kn-1)*Mx2v) = -2;
bNZ0 = zeros(Mx2v*xEDR,1);
QrMH = zeros(Mx2v*xEDR,1);
count = numel(rowS);
bNZ0(1:count) = rowS;
QrMH(1:count) = colS;
yr6M=[-1 1 0 0];
A6Pg=[0 0 -1 1];
for step = 0:min(VJpA,sTZh)
if count < 1, break, end
zmNu = count;
ZgmH = bNZ0(1:zmNu);
bEnO = QrMH(1:zmNu);
count = 0;
for zI4I = 1:zmNu
pZSY = bEnO(zI4I);
YldY = ZgmH(zI4I);
for ovOI=1:4
Z2SK = YldY + yr6M(ovOI);
uaRQ = pZSY + A6Pg(ovOI);
Nh5_ = Z2SK + (uaRQ-1)*Mx2v;
bIs9 = g_cm(Nh5_);
if bIs9 == -2
ZkWY=step+1;
fi1J(Z2SK,uaRQ) = ZgmH(zI4I);
ujHM(Z2SK,uaRQ) = bEnO(zI4I);
path = zeros(ZkWY,4);
for uEFO = 1:ZkWY
path(uEFO,1:2) = [Z2SK uaRQ];
Mnqa = fi1J(Z2SK,uaRQ);
v06O = ujHM(Z2SK,uaRQ);
path(uEFO,3:4) = [Mnqa v06O];
Z2SK = Mnqa;
uaRQ = v06O;
end
return
end
if bIs9 == -1 && B(Nh5_) == 0
g_cm(Nh5_) = step+1;
fi1J(Nh5_) = YldY;
ujHM(Nh5_) = pZSY;
count = count + 1; bNZ0(count) = Z2SK; QrMH(count) = uaRQ;
end
end
end
end
path = [];
end
|