| Code: | function W = solv(B)
lotv=636;
dD_N = rand(43,1);
W=qrkQ(B);
lPpx = S0Ri(B,W);
[ak1M,y1qa] = size(B);
kUL7 = B(ak1M:-1:1,:);
kUL7 = kUL7.';
[La34,NsTE] = rUof(kUL7,[1 2],[1 2],4*ak1M*y1qa);
if lPpx > NsTE
W = [ak1M-La34(:,2)+1 La34(:,1) ak1M-La34(:,4)+1 La34(:,3)];
lPpx=NsTE;
end
d2YA=rand('state');
rand(lotv,1);
if lPpx>1000
[La34,NsTE] = rUof(kUL7,[1 2],[1 2],4*ak1M*y1qa);
if lPpx > NsTE
W = [ak1M-La34(:,2)+1 La34(:,1) ak1M-La34(:,4)+1 La34(:,3)];
lPpx=NsTE;
end
end
rand('state',d2YA);
end
function [W,lPpx] = rUof(OhWB,olVZ,tl8_,rJKE)
[vwo8,IbgZ]=size(OhWB);
tGYG= -ones(vwo8+2,IbgZ+2);
tGYG(2:end-1,2:end-1)=OhWB;
VD0v = tGYG;
S2Vk = 4;
if size(VD0v,2) > 20
zl7n = 4;
ORb3 = 8;
DxS3 = 18;
else
zl7n = 3;
ORb3 = 7;
DxS3 = 13;
end
lPpx = inf;
vvLH = [1 2;2 1];
K4C9 = [1 3;3 1];
VjUj = [3 2 1;1 2 3];
for trok = olVZ
if trok == 2
[Divm EdNB] = Sxzv(VD0v,zl7n,vvLH(trok,:));
[EgDQ ZxQj] = eNqU(EdNB,Divm,ORb3,K4C9(trok,:));
[NG5x EB26] = eNqU(ZxQj,EgDQ,DxS3,K4C9(trok,:));
else
[Divm EdNB] = Sxzv(VD0v,4,vvLH(trok,:));
[NG5x EB26] = eNqU(EdNB,Divm,11,K4C9(trok,:));
end
for rOoC = tl8_
vEB8 = rL1C(VD0v,EB26,NG5x,S2Vk,DxS3,VjUj(rOoC,:))-1;
x54C = S0Ri(OhWB,vEB8);
if x54C <= lPpx
lPpx = x54C;
W = vEB8;
S2Vk = S2Vk - 1;
end
end
end
end
function wy6m = S0Ri(B,W)
vwo8=size(B,1);
B(W(:,1)+(W(:,2)-1)*vwo8)=0;
B(W(:,3)+(W(:,4)-1)*vwo8)=0;
wy6m=sum(B(:))+size(W,1)+sum(W(:,1)==W(:,3)&W(:,2)==W(:,4))*24;
end
function [QKQF K5l5] = ijtC(B,aLwm)
vxnY = sort(B(B>0),'descend');
y_f1 = size(vxnY,1);
if y_f1 < 1
QKQF = [];
K5l5 = 0;
return
end
FsDR=vxnY(diff([0;vxnY])~=0);
QKQF = zeros(nnz(FsDR),3);
EJdw=histc(vxnY,FsDR(end:-1:1));
QKQF(:,1)=FsDR;
QKQF(:,2)=EJdw(end:-1:1);
K5l5=nnz(FsDR);
if aLwm < 3, return, end
for hDWf = 1:K5l5
if QKQF(hDWf,2) >= 2
LGRp = QKQF(hDWf,1);
[hbvJ S7r1] = find(B == LGRp);
MzBl = 0;
a8ut = size(hbvJ,1);
MzBl=sum(abs(diff(hbvJ))+abs(diff(S7r1)));
QKQF(hDWf,3) = QKQF(hDWf,2)*LGRp - 0.85 * MzBl;
end
end
end
function [W B] = Sxzv(B,DxS3,aLwm)
W = [];
[QKQF K5l5] = ijtC(B,aLwm);
if K5l5 < 1
return
end
QKQF=sortrows(QKQF,-aLwm);
for hDWf = 1:K5l5
if QKQF(hDWf,2) >= 2
LGRp = QKQF(hDWf,1);
[hbvJ S7r1] = find(B == LGRp);
a8ut = size(hbvJ,1);
xpd4 = a8ut*(a8ut-1)/2;
dist = zeros(xpd4,3);
[Rk0L jj9a]=find(tril(ones(a8ut),-1));
dist(:,1)=jj9a;
dist(:,2)=Rk0L;
dist(:,3)=abs(S7r1(Rk0L)-S7r1(jj9a))+abs(hbvJ(Rk0L)-hbvJ(jj9a));
[MzBl o0iL] = sort(dist(:,3));
dist = dist(o0iL,:);
y_f1 = 0;
for trok = 1:xpd4
if dist(trok,3) > DxS3+1
break
end
EAyW = dist(trok,1);
pijE = dist(trok,2);
path = MHhH(B,[hbvJ(EAyW); hbvJ(pijE)], [S7r1(EAyW); S7r1(pijE)], -LGRp, DxS3, 2*LGRp);
if size(path,1) > 0
W = [W; path];
B = Ah2l(B,path,-LGRp);
y_f1 = 2;
edit = [1:(EAyW-1) (EAyW+1):(pijE-1) (pijE+1):a8ut];
hbvJ = [hbvJ(EAyW); hbvJ(pijE); hbvJ(edit)];
S7r1 = [S7r1(EAyW); S7r1(pijE); S7r1(edit)];
break
else
end
end
if y_f1 < 2
continue
end
for heV9 = 3:a8ut
[YKP3 FotE] = find(B == -LGRp);
FmhB = size(YKP3,1);
xpd4 = FmhB * (a8ut - y_f1);
E98A = (1:FmhB*a8ut)';
pijE=mod(E98A-1,a8ut)+1;
EAyW=ceil(E98A/a8ut);
zjm4 = (pijE>y_f1);
EAyW = EAyW(zjm4);
pijE = pijE(zjm4);
MzBl = abs(YKP3(EAyW)-hbvJ(pijE)) + abs(FotE(EAyW)-S7r1(pijE));
dist = [EAyW,pijE,MzBl];
[MzBl o0iL] = sort(dist(:,3));
dist = dist(o0iL,:);
iOc1 = false(a8ut,1);
VwHZ = false;
for trok = 1:xpd4
if dist(trok,3) > DxS3+1
break
end
pijE = dist(trok,2);
if iOc1(pijE)
randperm(4);
continue
end
EAyW = dist(trok,1);
path = MHhH(B,[YKP3(EAyW); hbvJ(pijE)], [FotE(EAyW); S7r1(pijE)], -LGRp, DxS3, LGRp);
iOc1(pijE)=true;
if size(path,1) > 0
W = [W; path];
B = Ah2l(B,path,-LGRp);
y_f1 = y_f1 + 1;
VwHZ = true;
hbvJ([heV9 pijE]) = hbvJ([pijE heV9]);
S7r1([heV9 pijE]) = S7r1([pijE heV9]);
break
end
end
if ~VwHZ
break
end
end
end
end
end
function [W B] = eNqU(B,W,qpuf,aLwm)
[QKQF K5l5] = ijtC(B,aLwm);
if K5l5 < 1, return, end
QKQF=sortrows(QKQF,-aLwm);
for hDWf = 1:K5l5
LGRp = QKQF(hDWf,1);
FmhB = sum(B == -LGRp);
if FmhB == 0
if QKQF(hDWf,2) >= 2
[hbvJ S7r1] = find(B == LGRp);
a8ut = size(hbvJ,1);
xpd4 = a8ut*(a8ut-1)*.5;
E98A = (1:a8ut*a8ut)';
pijE=mod(E98A-1,a8ut)+1;
EAyW=ceil(E98A/a8ut);
zjm4 = (EAyW<pijE);
EAyW = EAyW(zjm4);
pijE = pijE(zjm4);
MzBl = abs(hbvJ(EAyW)-hbvJ(pijE)) + abs(S7r1(EAyW)-S7r1(pijE));
dist = [EAyW,pijE,MzBl];
[MzBl o0iL] = sort(dist(:,3));
dist = dist(o0iL,:);
maxstep = min(qpuf,2*LGRp+1);
VwHZ = false;
for trok = 1:xpd4
if dist(trok,3) > maxstep+1
break
end
EAyW = dist(trok,1);
pijE = dist(trok,2);
path = MHhH(B,[hbvJ(EAyW); hbvJ(pijE)], [S7r1(EAyW); S7r1(pijE)], -LGRp, qpuf, 2*LGRp);
if size(path,1) > 0
W = [W; path];
B = Ah2l(B,path,-LGRp);
VwHZ = true;
break
end
end
if ~VwHZ
continue
end
end
end
[hbvJ S7r1] = find(B == LGRp);
SVQ7 = size(hbvJ,1);
maxstep = min(qpuf,LGRp+1);
for heV9 = 1:SVQ7
[YKP3 FotE] = find(B == -LGRp);
FmhB = size(YKP3,1);
xpd4 = FmhB * (SVQ7-heV9+1);
dist = zeros(xpd4,3);
trok = 0;
for EAyW = 1:FmhB
for pijE = heV9:SVQ7
trok = trok + 1;
dist(trok,1) = EAyW;
dist(trok,2) = pijE;
dist(trok,3) = abs(YKP3(EAyW)-hbvJ(pijE)) + abs(FotE(EAyW)-S7r1(pijE));
end
end
[MzBl o0iL] = sort(dist(:,3));
dist = dist(o0iL,:);
iOc1 = false(SVQ7,1);
VwHZ = false;
for trok = 1:xpd4
if dist(trok,3) > maxstep+1
break
end
pijE = dist(trok,2);
if iOc1(pijE)
randperm(4);
continue
end
EAyW = dist(trok,1);
path = MHhH(B,[YKP3(EAyW); hbvJ(pijE)], [FotE(EAyW); S7r1(pijE)], -LGRp, qpuf, 2*LGRp);
iOc1(pijE)=true;
if size(path,1) > 0
W = [W; path];
B = Ah2l(B,path,-LGRp);
VwHZ = true;
hbvJ([heV9 pijE]) = hbvJ([pijE heV9]);
S7r1([heV9 pijE]) = S7r1([pijE heV9]);
break
end
end
if ~VwHZ
break
end
end
end
end
function [KDzU WK1P] = At9X(tGYG,B,path)
[InNy kEL2] = size(B);
KDzU = tGYG == 0;
WK1P = KDzU;
KDzU(:,[1 kEL2]) = false;
WK1P([1 InNy],:) = false;
for hDWf = 1:size(path,1)
if path(hDWf,1) == path(hDWf,3)
KDzU(path(hDWf,1),path(hDWf,2)) = false;
KDzU(path(hDWf,3),path(hDWf,4)) = false;
end
if path(hDWf,2) == path(hDWf,4)
WK1P(path(hDWf,1),path(hDWf,2)) = false;
WK1P(path(hDWf,3),path(hDWf,4)) = false;
end
end
end
function B = Ah2l(B,path,kUG5)
B(path(1,1),path(1,2)) = kUG5;
for hDWf = 1:size(path,1);
B(path(hDWf,3),path(hDWf,4)) = kUG5;
end
end
function path = W0h5(tgCj,XDLt,InNy,E3r7)
path = zeros(E3r7,4);
tP7Y = mod(tgCj,InNy);
ObCE = ceil(tgCj/InNy);
for heV9 = 1:E3r7
path(heV9,1:2) = [tP7Y ObCE];
tgCj = XDLt(tgCj);
tP7Y = mod(tgCj,InNy);
ObCE = ceil(tgCj/InNy);
path(heV9,3:4) = [tP7Y ObCE];
end
end
function path = MHhH(B,hbvJ,S7r1,kUG5,DxS3,Eked)
[InNy kEL2] = size(B);
XDLt = zeros(InNy,kEL2);
GhnE = -ones(InNy,kEL2);
GhnE(hbvJ(2),S7r1(2)) = 0;
GhnE(hbvJ(1),S7r1(1)) = -2;
GhnE( B == kUG5 ) = -2;
LKJx = zeros(InNy*kEL2,1);
LKJx(1) = hbvJ(2) + (S7r1(2)-1)*InNy;
count = 1;
oczp = [-1 1 -InNy InNy];
HFnW = randperm(4);
for step = 0:min(DxS3,Eked)
if count < 1, break, end
a8ut = count;
tgCj = LKJx;
count = 0;
for hDWf = 1:a8ut
u9VT = tgCj(hDWf);
for OBYy=1:4
AKbU = u9VT + oczp(HFnW(OBYy));
TIdE = GhnE(AKbU);
if TIdE == -2
XDLt(AKbU) = u9VT;
path = W0h5(AKbU,XDLt,InNy,step+1);
return
end
if TIdE == -1 && B(AKbU) == 0
GhnE(AKbU) = step+1;
XDLt(AKbU) = u9VT;
count = count + 1;
LKJx(count) = AKbU;
end
end
end
end
path = [];
end
function path = UcVu(B,KDzU,WK1P,hbvJ,S7r1,kUG5,S2Vk,qpuf,Eked)
[InNy kEL2] = size(B);
MEv9 = false(InNy,kEL2);
XDLt = zeros(InNy,kEL2);
GhnE = -ones(InNy,kEL2);
GhnE(hbvJ(1),S7r1(1)) = -2;
GhnE( B == kUG5 ) = -2;
maxstep = min((S2Vk*27)+qpuf,Eked+1);
NpNg = zeros(maxstep+28,1);
NpNg(1) = hbvJ(2) + (S7r1(2)-1)*InNy;
oczp = [-InNy InNy -1 1];
for step = 1:maxstep
while NpNg(step)>0
u9VT = NpNg(step);
NpNg(step)=GhnE(u9VT);
for OBYy = 1:4
AKbU = u9VT + oczp(OBYy);
TIdE = GhnE(AKbU);
if TIdE==-1
if B(AKbU) == 0
GhnE(AKbU) = NpNg(step+1);
NpNg(step+1) = AKbU;
XDLt(AKbU) = u9VT;
elseif (KDzU(AKbU)&&(OBYy<3)) || (WK1P(AKbU)&&(OBYy>2))
GhnE(AKbU) = NpNg(step+26);
NpNg(step+26) = AKbU;
XDLt(AKbU) = u9VT;
MEv9(AKbU) = true;
end
end
if TIdE==-2
step=step+1;
XDLt(AKbU) = u9VT;
tP7Y=mod(AKbU,InNy);
ObCE=ceil(AKbU/InNy);
path = zeros(step,4);
heV9 = 0;
while tP7Y ~= hbvJ(2) || ObCE ~= S7r1(2)
heV9 = heV9 + 1;
path(heV9,1:2) = [tP7Y ObCE];
AKbU = tP7Y + (ObCE-1)*InNy;
qKUC = XDLt(AKbU);
kH9f=mod(qKUC,InNy);
yPYZ=ceil(qKUC/InNy);
path(heV9,3:4) = [kH9f yPYZ];
tP7Y = kH9f;
ObCE = yPYZ;
if MEv9(tP7Y,ObCE)
heV9 = heV9 + 1;
path(heV9,:) = [tP7Y ObCE tP7Y ObCE];
end
end
path = path(1:heV9,:);
return
end
end
end
end
path = [];
end
function W = qrkQ(B)
[W,lPpx] = GqOW(B);
XdRi = 0;
FS3M = round(mod(B(:),2));
if lPpx < 2100
return
end
[yoGx,sZhh] = size(B);
B = flipud(fliplr(B'));
[K5RG,FZ0a] = GqOW(B);
if lPpx > FZ0a
W = [yoGx-K5RG(:,2)+1 sZhh-K5RG(:,1)+1 yoGx-K5RG(:,4)+1 sZhh-K5RG(:,3)+1];
end
if FS3M~=XdRi; W = zeros(0,4); end
end
function [W,lPpx] = GqOW(B)
[vwo8,IbgZ]=size(B);
C5KP=nan(vwo8+2,IbgZ+2);
C5KP(2:end-1,2:end-1)=B;
VD0v = C5KP;
S2Vk = 4;
if size(VD0v,2) > 20
zl7n = 4;
ORb3 = 8;
DxS3 = 12;
else
zl7n = 3;
ORb3 = 7;
DxS3 = 11;
end
lPpx = inf;
vvLH = [1 2;2 1];
K4C9 = [1 3;3 1];
VjUj = [3 2 1;1 2 3];
for trok = 1:2
if trok == 2
[Divm EdNB] = wFbe(VD0v,zl7n,vvLH(trok,:));
[EgDQ ZxQj] = jsnB(EdNB,Divm,ORb3,K4C9(trok,:));
[NG5x EB26] = jsnB(ZxQj,EgDQ,DxS3,K4C9(trok,:));
else
[Divm EdNB] = wFbe(VD0v,4,vvLH(trok,:));
[NG5x EB26] = jsnB(EdNB,Divm,11,K4C9(trok,:));
end
for rOoC = 1:2
if trok == 2 && rOoC == 2 && lPpx > 2100, return, end
vEB8 = rL1C(VD0v,EB26,NG5x,S2Vk,DxS3,VjUj(rOoC,:))-1;
x54C = S0Ri(B,vEB8);
if x54C <= lPpx
lPpx = x54C;
W = vEB8;
S2Vk = S2Vk - 1;
end
end
end
if vwo8*IbgZ > 290; return; end
qr2h = sum(W(:,1)==W(:,3)&W(:,2)==W(:,4));
if qr2h <= 4
Uo1p = HXmy(B);
WDl7 = S0Ri(B,Uo1p);
if WDl7 < lPpx
W = Uo1p;
lPpx = WDl7;
end
end
end
function path = ltHh(B,hbvJ,S7r1,kUG5,DxS3,Eked)
function path = IvSJ(ISfm,QYV2,Bska)
CG2V(ISfm,QYV2) = z8oK(hDWf);
o3US(ISfm,QYV2) = hcW4(hDWf);
path = zeros(Bska,4);
for vkYP = 1:Bska
path(vkYP,1:2) = [ISfm QYV2];
dN4V = CG2V(ISfm,QYV2);
Xpnl = o3US(ISfm,QYV2);
path(vkYP,3:4) = [dN4V Xpnl];
ISfm = dN4V;
QYV2 = Xpnl;
end
end
[InNy kEL2] = size(B);
CG2V = zeros(InNy,kEL2);
o3US = zeros(InNy,kEL2);
GhnE = -ones(InNy,kEL2);
GhnE(hbvJ(2),S7r1(2)) = 0;
GhnE(hbvJ(1),S7r1(1)) = -2;
GhnE( B == kUG5 ) = -2;
NySH = zeros(InNy*kEL2,1);
xxkd = zeros(InNy*kEL2,1);
count = 1;
NySH(1) = hbvJ(2);
xxkd(1) = S7r1(2);
toj7=[-1 1 0 0];
hwiq=[0 0 -1 1];
for step = 0:min(DxS3,Eked)
if count < 1, break, end
a8ut = count;
z8oK = NySH(1:a8ut);
hcW4 = xxkd(1:a8ut);
count = 0;
for hDWf = 1:a8ut
omt3 = hcW4(hDWf);
u9VT = z8oK(hDWf);
for OBYy=1:4
ISfm = u9VT + toj7(OBYy);
QYV2 = omt3 + hwiq(OBYy);
AKbU = ISfm + (QYV2-1)*InNy;
TIdE = GhnE(AKbU);
if TIdE == -2
path = IvSJ(ISfm,QYV2,step+1);
return
elseif TIdE == -1 && B(AKbU) == 0
GhnE(AKbU) = step+1;
CG2V(AKbU) = u9VT;
o3US(AKbU) = omt3;
count = count + 1; NySH(count) = ISfm; xxkd(count) = QYV2;
end
end
end
end
path = [];
end
function ATqA = HXmy(pijE)
LGRp = unique(pijE);
LGRp(1) = [];
o1J5 = zeros(size(LGRp));
for hDWf = 1:length(o1J5)
o1J5(hDWf) = nnz(LGRp(hDWf) == pijE(:));
end
for hDWf = 1:length(o1J5)
if o1J5(hDWf) == 1
pijE(LGRp(hDWf) == pijE(:)) = -1;
end
end
IfA_ = zeros(size(pijE)+2);
x6Wh = repmat(-1,size(IfA_));
x6Wh(2:end-1,2:end-1) = pijE;
ATqA = [];
[sUTX, BBkg] = find(x6Wh>0);
MzBl = (size(x6Wh,1)/2 - sUTX).^2 + (size(x6Wh,2)/2 - BBkg).^2;
[MzBl, order] = sort(MzBl);
order = order';
for K5l5 = 1:length(sUTX)-1
HBYq = 0;
nLBA = 32;
for hDWf = order
if IfA_(sUTX(hDWf), BBkg(hDWf))
continue
end
[wy6m, f1st, BZ8b] = RAOF(x6Wh, IfA_, sUTX(hDWf), BBkg(hDWf), nLBA);
if wy6m > HBYq
HBYq = wy6m;
lFFQ = f1st;
nLBA = BZ8b;
if nLBA == 1
break
end
end
end
if HBYq == 0
ATqA = ATqA - 1;
return
end
IfA_ = Ah2l(IfA_, lFFQ, x6Wh(lFFQ(1,1), lFFQ(1,2)));
x6Wh = Ah2l(x6Wh, lFFQ, x6Wh(lFFQ(1,1), lFFQ(1,2)));
ATqA = [ATqA; lFFQ];
end
ATqA = ATqA - 1;
end
function [HBYq, lFFQ, nLBA] = RAOF(pijE, IfA_, tgCj, hcW4, hOxE)
HBYq = 0;
lFFQ = [];
vkYP = [1 -1 0 0];
K5l5 = [0 0 1 -1];
if ~any(IfA_(:)==pijE(tgCj,hcW4))
IfA_ = pijE;
end
x6Wh = pijE;
x6Wh(x6Wh>0) = -1;
x6Wh(tgCj,hcW4) = 1;
nLBA = Inf;
LGRp = pijE(tgCj,hcW4);
for hDWf = 1:hOxE-2
[sUTX, BBkg] = find(x6Wh==hDWf);
for o1J5 = 1:length(sUTX)
for T1CC = 1:4
eUe6 = sUTX(o1J5) + vkYP(T1CC);
dMBu = BBkg(o1J5) + K5l5(T1CC);
if IfA_(eUe6,dMBu) == LGRp && ~(eUe6 == tgCj && dMBu == hcW4)
nLBA = hDWf;
break
end
MoiI = x6Wh(eUe6,dMBu);
if MoiI == 0
x6Wh(eUe6,dMBu) = hDWf+1;
end
end
if nLBA < Inf
break
end
end
if nLBA < Inf
break
end
end
if nLBA == Inf
return
end
HBYq = pijE(tgCj,hcW4) - nLBA;
if nLBA == 1
lFFQ = [tgCj, hcW4, eUe6, dMBu];
return
end
lFFQ = zeros(nLBA,4);
for step = nLBA:-1:1
for T1CC = 1:4
VN19 = eUe6 + vkYP(T1CC);
IIm5 = dMBu + K5l5(T1CC);
if x6Wh(VN19, IIm5) == step
break
end
end
lFFQ(step,:) = [VN19, IIm5, eUe6, dMBu];
eUe6 = VN19;
dMBu = IIm5;
end
end
function [W B] = wFbe(B,DxS3,aLwm)
W = [];
[QKQF K5l5] = ijtC(B,aLwm);
if K5l5 < 1
return
end
QKQF=sortrows(QKQF,-aLwm);
for hDWf = 1:K5l5
if QKQF(hDWf,2) >= 2
LGRp = QKQF(hDWf,1);
[hbvJ S7r1] = find(B == LGRp);
a8ut = size(hbvJ,1);
xpd4 = a8ut*(a8ut-1)/2;
dist = zeros(xpd4,3);
trok = 0;
for EAyW = 1:a8ut
for pijE = (EAyW+1):a8ut
trok = trok + 1;
dist(trok,1) = EAyW;
dist(trok,2) = pijE;
dist(trok,3) = abs(hbvJ(EAyW)-hbvJ(pijE)) + abs(S7r1(EAyW)-S7r1(pijE));
end
end
[MzBl o0iL] = sort(dist(:,3));
dist = dist(o0iL,:);
dEGJ = reshape(dist(:,1:2)',[],1);
y_f1 = 0;
sGce = 1;
WGgZ = false(a8ut,1);
for hDWf=1:a8ut
X9sD = find( ~WGgZ(dEGJ(sGce:end)) , 1 , 'first');
if isempty(X9sD)
break
end
EAyW = dEGJ(X9sD);
Distance = abs(hbvJ([1:EAyW-1,EAyW+1:end]')-hbvJ(EAyW)) + abs(S7r1([1:EAyW-1,EAyW+1:end]')-S7r1(EAyW));
if max(Distance)>DxS3-1
break
end
path = vp8Q(B,hbvJ(EAyW),S7r1(EAyW),hbvJ([1:EAyW-1,EAyW+1:end]'),S7r1([1:EAyW-1,EAyW+1:end]'), -LGRp, DxS3, 2*LGRp);
if size(path,1) > 0
W = [W; path];
B = Ah2l(B,path,-LGRp);
y_f1 = 2;
break
end
end
if y_f1 < 2
continue
end
for vkYP = 3:a8ut
[YKP3 FotE] = find(B == -LGRp);
[hbvJ S7r1] = find(B == LGRp);
[ymuy,f9CB] = meshgrid(hbvJ,YKP3);
[CWG9,MRvF] = meshgrid(hbvJ,YKP3);
Distance = abs(ymuy-f9CB) + abs(CWG9-MRvF);
if max(Distance(:))>DxS3-1
break
end
path = vp8Q(B,YKP3,FotE,hbvJ,S7r1, -LGRp, DxS3, 2*LGRp);
if size(path,1) > 0
W = [W; path];
B = Ah2l(B,path,-LGRp);
VwHZ = true;
else
break
end
end
end
end
end
function [W B] = jsnB(B,W,rFRS,aLwm)
[QKQF K5l5] = ijtC(B,aLwm);
if K5l5 < 1, return, end
QKQF=sortrows(QKQF,-aLwm);
for hDWf = 1:K5l5
LGRp = QKQF(hDWf,1);
FmhB = sum(B == -LGRp);
if FmhB == 0
if QKQF(hDWf,2) >= 2
[hbvJ S7r1] = find(B == LGRp);
a8ut = size(hbvJ,1);
xpd4 = a8ut*(a8ut-1)/2;
dist = zeros(xpd4,3);
trok = 0;
for EAyW = 1:a8ut
for pijE = (EAyW+1):a8ut
trok = trok + 1;
dist(trok,1) = EAyW;
dist(trok,2) = pijE;
dist(trok,3) = abs(hbvJ(EAyW)-hbvJ(pijE)) + abs(S7r1(EAyW)-S7r1(pijE));
end
end
[MzBl o0iL] = sort(dist(:,3));
dist = dist(o0iL,:);
maxstep = min(rFRS,2*LGRp+1);
VwHZ = false;
for trok = 1:xpd4
if dist(trok,3) > maxstep+1
break
end
EAyW = dist(trok,1);
pijE = dist(trok,2);
path = ltHh(B,[hbvJ(EAyW); hbvJ(pijE)], [S7r1(EAyW); S7r1(pijE)], -LGRp, rFRS, 2*LGRp);
if size(path,1) > 0
W = [W; path];
B = Ah2l(B,path,-LGRp);
VwHZ = true;
break
end
end
if ~VwHZ
continue
end
end
end
[hbvJ S7r1] = find(B == LGRp);
B72S = size(hbvJ,1);
maxstep = min(rFRS,LGRp+1);
for vkYP = 1:B72S
[YKP3 FotE] = find(B == -LGRp);
[hbvJ S7r1] = find(B == LGRp);
VwHZ = false;
path = vp8Q(B,YKP3,FotE,hbvJ,S7r1, -LGRp, rFRS, LGRp);
if size(path,1) > 0
W = [W; path];
B = Ah2l(B,path,-LGRp);
VwHZ = true;
end
if ~VwHZ
break
end
end
end
end
function [W B] = rL1C(C5KP,B,W,S2Vk,rFRS,aLwm)
function JjLk()
for ATqA = 1:size(path,1);
if path(ATqA,1) == path(ATqA,3)
vtIi(path(ATqA,1),path(ATqA,2)) = false;
vtIi(path(ATqA,3),path(ATqA,4)) = false;
if path(ATqA,2) == path(ATqA,4)
B(path(ATqA,1),path(ATqA,2)) = -9999;
end
end
if path(ATqA,2) == path(ATqA,4)
V0_R(path(ATqA,1),path(ATqA,2)) = false;
V0_R(path(ATqA,3),path(ATqA,4)) = false;
end
end
end
[vtIi V0_R] = At9X(C5KP,B,W);
[QKQF K5l5] = ijtC(B,aLwm);
if K5l5 < 1, return, end
QKQF=sortrows(QKQF,-aLwm);
for hDWf = 1:K5l5
LGRp = QKQF(hDWf,1);
FmhB = sum(B == -LGRp);
if FmhB == 0
if QKQF(hDWf,2) >= 2
[hbvJ S7r1] = find(B == LGRp);
a8ut = size(hbvJ,1);
xpd4 = a8ut*(a8ut-1)/2;
dist = zeros(xpd4,3);
trok = 0;
for EAyW = 1:a8ut
for pijE = (EAyW+1):a8ut
trok = trok + 1;
dist(trok,1) = EAyW;
dist(trok,2) = pijE;
dist(trok,3) = abs(hbvJ(EAyW)-hbvJ(pijE)) + abs(S7r1(EAyW)-S7r1(pijE));
end
end
[MzBl o0iL] = sort(dist(:,3));
dist = dist(o0iL,:);
maxstep = min((S2Vk*25)+rFRS,2*LGRp+1);
VwHZ = false;
for trok = 1:xpd4
if dist(trok,3) > maxstep+1
break
end
EAyW = dist(trok,1);
pijE = dist(trok,2);
path = UcVu(B,vtIi,V0_R,[hbvJ(EAyW); hbvJ(pijE)], [S7r1(EAyW); S7r1(pijE)], -LGRp, S2Vk, rFRS, 2*LGRp);
if size(path,1) > 0
W = [W; path];
B = Ah2l(B,path,-LGRp);
JjLk();
VwHZ = true;
break
end
end
if ~VwHZ
continue
end
end
end
[hbvJ S7r1] = find(B == LGRp);
B72S = size(hbvJ,1);
maxstep = min((S2Vk*25)+rFRS,LGRp+1);
for vkYP = 1:B72S
[YKP3 FotE] = find(B == -LGRp);
[hbvJ S7r1] = find(B == LGRp);
VwHZ = false;
path = koS7(B,vtIi,V0_R,YKP3,FotE,hbvJ,S7r1, -LGRp, S2Vk, rFRS, LGRp);
if size(path,1) > 0
W = [W; path];
B = Ah2l(B,path,-LGRp);
JjLk();
VwHZ = true;
end
if ~VwHZ
break
end
end
end
end
function path = koS7(B,KDzU,WK1P,rowS,colS,cKP6,oMZ4,kUG5,S2Vk,qpuf,Eked)
function path = W0h5(AKbU,step)
XDLt(AKbU) = u9VT;
path = zeros(step,4);
heV9 = 0;
dt2e = 0;
afGK = zeros(step,1);
UdOL = zeros(step,1);
NBEO = zeros(step,1);
while isempty(find(KmT8==AKbU,1))
heV9 = heV9 + 1;
afGK(heV9,1) = AKbU;
qKUC = XDLt(AKbU);
UdOL(heV9,1) = qKUC;
AKbU = qKUC;
if MEv9(AKbU)
dt2e = dt2e + 1;
NBEO(dt2e,1) = AKbU;
end
end
afGK = [ afGK(1:heV9,:) ; NBEO(1:dt2e,1) ];
UdOL = [ UdOL(1:heV9,:) ; NBEO(1:dt2e,1) ];
path = [ mod(afGK,InNy) , ceil(afGK/InNy) , mod(UdOL,InNy) , ceil(UdOL/InNy) ];
end
[InNy kEL2] = size(B);
MEv9 = false(InNy,kEL2);
XDLt = zeros(InNy,kEL2);
GhnE = -ones(InNy,kEL2);
KmT8 = rowS + (colS-1)*InNy;
GhnE(KmT8) = 0;
GhnE(cKP6 + (oMZ4-1)*InNy) = -2;
maxstep = min((S2Vk*25)+qpuf,Eked+1);
OHXM = zeros(maxstep+26,1);
mK8W = [-1 1];
for step = 0:maxstep
if step == 0
tgCj = KmT8;
elseif OHXM(step) == 0
continue
else
tgCj = find(GhnE == step);
end
a8ut = numel(tgCj);
for hDWf = 1:a8ut
u9VT = tgCj(hDWf);
for bEo5 = 1:2
AKbU = u9VT + mK8W(bEo5) * InNy;
TIdE = GhnE(AKbU);
if TIdE == -2
path = W0h5(AKbU,step+1);
return
elseif TIdE == -1
if B(AKbU) == 0
GhnE(AKbU) = step+1; OHXM(step+1) = 1;
XDLt(AKbU) = u9VT;
elseif KDzU(AKbU)
GhnE(AKbU) = step+26; OHXM(step+26) = 1;
XDLt(AKbU) = u9VT;
MEv9(AKbU) = true;
end
end
end
for bEo5 = 1:2
AKbU = u9VT + mK8W(bEo5);
TIdE = GhnE(AKbU);
if TIdE == -2
path = W0h5(AKbU,step+1);
return
elseif TIdE == -1
if B(AKbU) == 0
GhnE(AKbU) = step+1; OHXM(step+1) = 1;
XDLt(AKbU) = u9VT;
elseif WK1P(AKbU)
GhnE(AKbU) = step+26; OHXM(step+26) = 1;
XDLt(AKbU) = u9VT;
MEv9(AKbU) = true;
end
end
end
end
end
path = zeros(0,4);
end
function path = vp8Q(B,rowS,colS,ATnu,z_RT,kUG5,DxS3,Eked)
[InNy kEL2] = size(B);
CG2V = zeros(InNy,kEL2);
o3US = zeros(InNy,kEL2);
GhnE = -ones(InNy,kEL2);
GhnE(rowS+(colS-1)*InNy) = 0;
GhnE(ATnu+(z_RT-1)*InNy) = -2;
LKJx = zeros(InNy*kEL2,1);
xxkd = zeros(InNy*kEL2,1);
count = numel(rowS);
LKJx(1:count) = rowS;
xxkd(1:count) = colS;
toj7=[-1 1 0 0];
hwiq=[0 0 -1 1];
for step = 0:min(DxS3,Eked)
if count < 1, break, end
a8ut = count;
z8oK = LKJx(1:a8ut);
hcW4 = xxkd(1:a8ut);
count = 0;
for hDWf = 1:a8ut
omt3 = hcW4(hDWf);
u9VT = z8oK(hDWf);
for OBYy=1:4
ISfm = u9VT + toj7(OBYy);
QYV2 = omt3 + hwiq(OBYy);
AKbU = ISfm + (QYV2-1)*InNy;
TIdE = GhnE(AKbU);
if TIdE == -2
Bska=step+1;
CG2V(ISfm,QYV2) = z8oK(hDWf);
o3US(ISfm,QYV2) = hcW4(hDWf);
path = zeros(Bska,4);
for vkYP = 1:Bska
path(vkYP,1:2) = [ISfm QYV2];
dN4V = CG2V(ISfm,QYV2);
Xpnl = o3US(ISfm,QYV2);
path(vkYP,3:4) = [dN4V Xpnl];
ISfm = dN4V;
QYV2 = Xpnl;
end
return
end
if TIdE == -1 && B(AKbU) == 0
GhnE(AKbU) = step+1;
CG2V(AKbU) = u9VT;
o3US(AKbU) = omt3;
count = count + 1; LKJx(count) = ISfm; xxkd(count) = QYV2;
end
end
end
end
path = [];
end
|