| Code: | function KjD = solver(BXe)
Uj6 = rand(8,1);
KjD = Fz_(BXe,73);
UCh = YiU(BXe,KjD);
YL7 = size(BXe,1);
Ucv = BXe(YL7:-1:1,:);
Ucv = Ucv.';
XRj = Fz_(Ucv,83);
XRj = [YL7-XRj(:,2)+1 XRj(:,1) YL7-XRj(:,4)+1 XRj(:,3)];
LBE = YiU(BXe,XRj);
if UCh>LBE
KjD=XRj;
end
end
function TS4 = YiU(QcE,FEP)
Wjq=size(QcE,1);
QcE(FEP(:,1)+(FEP(:,2)-1)*Wjq)=0;
QcE(FEP(:,3)+(FEP(:,4)-1)*Wjq)=0;
TS4=sum(QcE(:))+size(FEP,1)+sum(FEP(:,1)==FEP(:,3)&FEP(:,2)==FEP(:,4))*24;
end
function KjD = Fz_(BXe,step)
FXV = unique(BXe(BXe>0));
I8q = zeros(size(FXV));
for i = 1:length(I8q)
I8q(i) = nnz(FXV(i) == BXe(:));
end
for i = 1:length(I8q)
if I8q(i) == 1
BXe(FXV(i) == BXe(:)) = -1;
end
end
D8Y = zeros(size(BXe)+2);
EDA = repmat(-1,size(D8Y));
EDA(2:end-1,2:end-1) = BXe;
KjD = [];
[LiX, K80] = find(EDA>0);
SDc = (size(EDA,1)/2 - LiX).^2 + (size(EDA,2)/2 - K80).^2;
[SDc, V0l] = sort(SDc);
for Avw = 1:length(LiX)-1
Bih = 0;
Fwa = step;
for i = (V0l)'
if D8Y(LiX(i), K80(i))
continue
end
[TS4, DRb, VUD, WFI, X90] = Iyw(EDA, D8Y, LiX(i), K80(i), Fwa);
if TS4 > Bih
Bih = TS4;
Fwa = DRb;
AR_ = VUD;
WpI = WFI;
ZZC = X90;
if Fwa == 1
break
end
end
end
if Bih == 0
KjD = KjD - 1;
return
end
NjU = IxI(LiX(i), K80(i), AR_, WpI, Fwa, ZZC);
D8Y = KIe(D8Y, NjU, EDA(NjU(1,1), NjU(1,2)));
EDA = KIe(EDA, NjU, EDA(NjU(1,1), NjU(1,2)));
KjD = [KjD; NjU];
end
KjD = KjD - 1;
end
function [Bih, Fwa, VUD, WFI, EDA] = Iyw(BXe, D8Y, Ohe, JKO, Ylv)
Bih = 0;
Fwa = Inf;
j = [1 -1 0 0];
Avw = [0 0 1 -1];
if ~any(D8Y(:)==BXe(Ohe,JKO))
D8Y = BXe;
end
EDA = BXe;
EDA(EDA>0) = -1;
EDA(Ohe,JKO) = 1;
IMl = zeros(1,100);
Vxm = IMl;
IMl(1) = Ohe;
Vxm(1) = JKO;
WbL = 1;
ZiO = BXe(Ohe,JKO);
for i = 1:Ylv-1
LiX = IMl;
K80 = Vxm;
UP0 = WbL;
WbL = 0;
for I8q = 1:UP0
NRX = LiX(I8q);
VdB = K80(I8q);
for IIq = 1:4
VUD = NRX + j(IIq);
WFI = VdB + Avw(IIq);
M6t = D8Y(VUD,WFI);
if M6t == ZiO && ~(VUD == Ohe && WFI == JKO)
Fwa = i;
break
end
M6t = EDA(VUD,WFI);
if M6t == 0
EDA(VUD,WFI) = i + 1;
WbL = WbL + 1;
IMl(WbL) = VUD;
Vxm(WbL) = WFI;
end
end
if Fwa < Inf
break
end
end
if Fwa < Inf
break
end
end
if Fwa == Inf
return
end
Bih = ZiO - Fwa;
end
function NjU = IxI(Ohe, JKO, VUD, WFI, Fwa, EDA)
if Fwa == 1
NjU = [Ohe, JKO, VUD, WFI];
return
end
j = [1 -1 0 0];
Avw = [0 0 1 -1];
NjU = zeros(Fwa,4);
UNj = randperm(4);
for step = Fwa:-1:1
for IIq = 1:4
PZL = UNj(IIq);
RI6 = VUD + j(PZL);
K2C = WFI + Avw(PZL);
if EDA(RI6, K2C) == step
break
end
end
NjU(step,:) = [RI6, K2C, VUD, WFI];
VUD = RI6;
WFI = K2C;
end
end
function BXe = KIe(BXe, EWQ, M6t)
for i = 1:size(EWQ,1)
BXe(EWQ(i,1), EWQ(i,2)) = M6t;
end
BXe(EWQ(end,3), EWQ(end,4)) = M6t;
end
|