| Code: | function w = solver(b)
XisGDqnJOU = rand(8,1);
w = ChT8tlga07(b,77);
zBSfeJIbSK = tsWTikRuVD(b,w);
xPccIAdO7u = size(b,1);
BVBGSprwU1 = flipud(b);
BVBGSprwU1 = BVBGSprwU1.';
cOelHrU5n_ = ChT8tlga07(BVBGSprwU1,90);
cOelHrU5n_ = [xPccIAdO7u-cOelHrU5n_(:,2)+1 cOelHrU5n_(:,1) xPccIAdO7u-cOelHrU5n_(:,4)+1 cOelHrU5n_(:,3)];
kqTHazhEbg = tsWTikRuVD(b,cOelHrU5n_);
if zBSfeJIbSK>kqTHazhEbg
w=cOelHrU5n_;
end
end
function oV8CumY9Yg = tsWTikRuVD(Na_yYuz63r,eTH5Q4orx2)
jzEOhdDFb4=size(Na_yYuz63r,1);
Na_yYuz63r(eTH5Q4orx2(:,1)+(eTH5Q4orx2(:,2)-1)*jzEOhdDFb4)=0;
Na_yYuz63r(eTH5Q4orx2(:,3)+(eTH5Q4orx2(:,4)-1)*jzEOhdDFb4)=0;
oV8CumY9Yg=sum(Na_yYuz63r(:))+size(eTH5Q4orx2,1)+sum(eTH5Q4orx2(:,1)==eTH5Q4orx2(:,3)&eTH5Q4orx2(:,2)==eTH5Q4orx2(:,4))*24;
end
function w = ChT8tlga07(b,step)
KckNcTPrEd = unique(b(b>0));
PHVvJlrNut=zeros(size(KckNcTPrEd));
for HblT5kECWi=1:numel(KckNcTPrEd)
MBD4UHqQRm=find(b==KckNcTPrEd(HblT5kECWi));
if numel(MBD4UHqQRm)==1
PHVvJlrNut(HblT5kECWi)=KckNcTPrEd(HblT5kECWi);
b(MBD4UHqQRm)=-1;
else
PHVvJlrNut(HblT5kECWi)=KckNcTPrEd(HblT5kECWi);
end
end
u7ftz4iOvd = false(max(b(:)),1);
Sz9ZDhtzDB = zeros(size(b)+2);
oDl7tNLe19 = repmat(-1,size(Sz9ZDhtzDB));
oDl7tNLe19(2:end-1,2:end-1) = b;
w = [];
[t0ChV3f8Xu, aFfu2YuA9M] = find(oDl7tNLe19>0);
yhYTlcMcpX = (size(oDl7tNLe19,1)/2 - t0ChV3f8Xu).^2 + (size(oDl7tNLe19,2)/2 - aFfu2YuA9M).^2;
[yhYTlcMcpX, order] = sort(yhYTlcMcpX);
for eTphpl6KkR = 1:length(t0ChV3f8Xu)-1
aSORmE8poY = 0;
OqoIWLSfB3 = step;
for HblT5kECWi = order'
if Sz9ZDhtzDB(t0ChV3f8Xu(HblT5kECWi), aFfu2YuA9M(HblT5kECWi))
continue
end
HqzXs5URn4 = u7ftz4iOvd(oDl7tNLe19(t0ChV3f8Xu(HblT5kECWi), aFfu2YuA9M(HblT5kECWi)));
[oV8CumY9Yg, LTh4LRrYFV, AbIlVQmo39, zix3C0EDsQ, BNPEatzUFX] = uqxFjRE0sI(oDl7tNLe19, Sz9ZDhtzDB, t0ChV3f8Xu(HblT5kECWi), aFfu2YuA9M(HblT5kECWi), OqoIWLSfB3, HqzXs5URn4);
if oV8CumY9Yg > aSORmE8poY
aSORmE8poY = oV8CumY9Yg;
OqoIWLSfB3 = LTh4LRrYFV;
mfCaBT_pio = AbIlVQmo39;
JBTGnPDfty = zix3C0EDsQ;
jomASw95E9 = BNPEatzUFX;
if OqoIWLSfB3 == 1
break
end
end
end
if aSORmE8poY == 0
w = w - 1;
return
end
xvPqq2XAya = ji7rrktxVL(t0ChV3f8Xu(HblT5kECWi), aFfu2YuA9M(HblT5kECWi), mfCaBT_pio, JBTGnPDfty, OqoIWLSfB3, jomASw95E9);
KzDCuUIwaj = oDl7tNLe19(xvPqq2XAya(1,1), xvPqq2XAya(1,2));
Sz9ZDhtzDB = doMove(Sz9ZDhtzDB, xvPqq2XAya, KzDCuUIwaj);
oDl7tNLe19 = doMove(oDl7tNLe19, xvPqq2XAya, KzDCuUIwaj);
u7ftz4iOvd(KzDCuUIwaj)=true;
w = [w; xvPqq2XAya];
end
w = w - 1;
end
function [aSORmE8poY, OqoIWLSfB3, AbIlVQmo39, zix3C0EDsQ, oDl7tNLe19] = uqxFjRE0sI(b, Sz9ZDhtzDB, pA13EtxUt4, kbfcKBkOQ9, gAHz0uFBrc,Flag)
aSORmE8poY = 0;
OqoIWLSfB3 = Inf;
lFDidaza3t = [1 -1 0 0];
eTphpl6KkR = [0 0 1 -1];
if ~Flag
Sz9ZDhtzDB = b;
end
oDl7tNLe19 = b;
oDl7tNLe19(oDl7tNLe19>0) = -1;
oDl7tNLe19(pA13EtxUt4,kbfcKBkOQ9) = 1;
cammSM81fY = zeros(1,100);
UyV9DM3j_O = cammSM81fY;
cammSM81fY(1) = pA13EtxUt4;
UyV9DM3j_O(1) = kbfcKBkOQ9;
EKuj1sxlC9 = 1;
EUjK3zIE18 = b(pA13EtxUt4,kbfcKBkOQ9);
for HblT5kECWi = 1:gAHz0uFBrc-1
t0ChV3f8Xu = cammSM81fY;
aFfu2YuA9M = UyV9DM3j_O;
Hqc1x9WkMP = EKuj1sxlC9;
EKuj1sxlC9 = 0;
for PHVvJlrNut = 1:Hqc1x9WkMP
A6OgHbBZoS = t0ChV3f8Xu(PHVvJlrNut);
Pu_G8jGYrW = aFfu2YuA9M(PHVvJlrNut);
for wvYBJykB0g = 1:4
AbIlVQmo39 = A6OgHbBZoS + lFDidaza3t(wvYBJykB0g);
zix3C0EDsQ = Pu_G8jGYrW + eTphpl6KkR(wvYBJykB0g);
aMzcXiezs8 = Sz9ZDhtzDB(AbIlVQmo39,zix3C0EDsQ);
if aMzcXiezs8 == EUjK3zIE18 && ~(AbIlVQmo39 == pA13EtxUt4 && zix3C0EDsQ == kbfcKBkOQ9)
OqoIWLSfB3 = HblT5kECWi;
break
end
aMzcXiezs8 = oDl7tNLe19(AbIlVQmo39,zix3C0EDsQ);
if aMzcXiezs8 == 0
oDl7tNLe19(AbIlVQmo39,zix3C0EDsQ) = HblT5kECWi + 1;
EKuj1sxlC9 = EKuj1sxlC9 + 1;
cammSM81fY(EKuj1sxlC9) = AbIlVQmo39;
UyV9DM3j_O(EKuj1sxlC9) = zix3C0EDsQ;
end
end
if OqoIWLSfB3 < Inf
break
end
end
if OqoIWLSfB3 < Inf
break
end
end
if OqoIWLSfB3 == Inf
return
end
aSORmE8poY = EUjK3zIE18 - OqoIWLSfB3;
end
function xvPqq2XAya = ji7rrktxVL(pA13EtxUt4, kbfcKBkOQ9, AbIlVQmo39, zix3C0EDsQ, OqoIWLSfB3, oDl7tNLe19)
if OqoIWLSfB3 == 1
xvPqq2XAya = [pA13EtxUt4, kbfcKBkOQ9, AbIlVQmo39, zix3C0EDsQ];
return
end
lFDidaza3t = [1 -1 0 0];
eTphpl6KkR = [0 0 1 -1];
xvPqq2XAya = zeros(OqoIWLSfB3,4);
ZZ6Rz_jLIO = randperm(4);
for step = OqoIWLSfB3:-1:1
for wvYBJykB0g = 1:4
dWnmIDfKJd = ZZ6Rz_jLIO(wvYBJykB0g);
W7SWadBx_5 = AbIlVQmo39 + lFDidaza3t(dWnmIDfKJd);
rtsVe2zBat = zix3C0EDsQ + eTphpl6KkR(dWnmIDfKJd);
if oDl7tNLe19(W7SWadBx_5, rtsVe2zBat) == step
break
end
end
xvPqq2XAya(step,:) = [W7SWadBx_5, rtsVe2zBat, AbIlVQmo39, zix3C0EDsQ];
AbIlVQmo39 = W7SWadBx_5;
zix3C0EDsQ = rtsVe2zBat;
end
end
function b = doMove(b, olbKRpQRR6, aMzcXiezs8)
b(olbKRpQRR6(:,1)+(olbKRpQRR6(:,2)-1)*size(b,1))=aMzcXiezs8;
b(olbKRpQRR6(end,3), olbKRpQRR6(end,4)) = aMzcXiezs8;
end
|