1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
| P =[6 2 7 5 3
6 2 5 7 3
6 2 5 3 7]
V=[ 9 8 4 1]
a=3;
X1=0;
Y=cell(n-1,1);
for d=n-1:-1:1
if d~=n-1
% transformer les valeurs "d+1" en valeurs "d" et les valeurs "d" en valeurs "d+1" pour V et P
P = P-((d+1)-d)*(P==d+1)+((d+1)-d)*(P==d);
V(:,1:n-(a+2)) = V(:,1:n-(a+2))-((d+1)-d)*(V(:,1:n-(a+2))==d+1)+((d+1)-d)*(V(:,1:n-(a+2))==d);
%calculer C1 C2 C pour remplir Y
rows = P(:,1:a+1);
cols = P(:,2:a+2);
C1= sum( A( sub2ind(size(A),rows,cols) ) ,2) ;
[~,IX]=sort(C1,'descend');
rows = P(:,[1 a+2:-1:3]);
cols = P(:,a+2:-1:2);
C2= sum( A( sub2ind(size(A),rows,cols) ) ,2) ;
[~,IY]=sort(C2,'descend');
rows = V(:,1:n-(a+3));
cols = V(:,2:n-(a+2));
C= sum(A( sub2ind(size(A),rows,cols) ) ) ;
if C1(IX(1))>C2(IY(1))
X0=C1(IX(1))+C+A(V(n-(a+2)),P(IX(1),1));
if X0>X1
Y{n}=[V(1,1:n-(a+2)) P(IX(1),:)];
X1=X0;
end
else
X0=C2(IY(1))+C+A(V(n-(a+2)),P(IY(1),1));
if X0 > X1
Y{n}=[V(1,1:n-(a+2)) P(IY(1),1) P(IY(1),a+2:-1:2)];
X1=X0;
end
end
end
D=P;
V2=V(1,1:n-(a+2));
for r=n-1:-1:2
D(D(:,end)==r,:)=[];
if isempty(D)==0
% transformer les valeurs "r+1" en valeurs "r" et les valeurs "r" en valeurs "r+1" pour V2 et D
D = D-((r+1)-r)*(D==r+1)+((r+1)-r)*(D==r);
V2(:,1:n-(a+2)) = V2(:,1:n-(a+2))-((r+1)-r)*(V2(:,1:n-(a+2))==r+1)+((r+1)-r)*(V2(:,1:n-(a+2))==r);
rows = D(:,1:a+1);
cols = D(:,2:a+2);
C1= sum( A( sub2ind(size(A),rows,cols) ) ,2);
[~,IX]=sort(C1,'descend');
rows = D(:,[1 a+2:-1:3]);
cols = D(:,a+2:-1:2);
C2= sum( A( sub2ind(size(A),rows,cols) ) ,2) ;
[~,IY]=sort(C2,'descend');
rows = V2(:,1:n-(a+3));
cols = V2(:,2:n-(a+2));
C= sum(A( sub2ind(size(A),rows,cols) ) ) ;
R2=C1(IX(1));
R3=C2(IY(1));
if R2 >= R3
X0=C1(IX(1))+C+A(V2(n-(a+2)),D(IX(1),1));
if X0 > X1
Y{r}=[V2(1,1:n-(a+2)) D(IX(1),:)];
X1=X0;
end
else
X0=C2(IY(1))+C+A(V2(n-(a+2)),D(IY(1),1));
if X0 > X1
Y{r}=[V2(1,1:n-(a+2)) D(IY(1),1) D(IY(1),a+2:-1:2)];
X1=X0;
end
end
end
end
end |
Partager