Corrigé CCINP 2026 Informatique MPI — Partie I (I.4) (Q12 à Q22) : Une 2-approximation du voyageur de commerce, en C
Sujet officiel du concours CCINP, session 2026, épreuve Informatique MPI. Corrigé rédigé par Ibrahim Alame.
Sujet officiel (PDF, site du concours)
Énoncé
Version optimisation : dans complet, dont le coût vérifie l'inégalité triangulaire , trouver un cycle hamiltonien de coût minimal. Algorithme 1 : arbre couvrant de coût minimal de ; liste des sommets rencontrés lors d'un parcours en profondeur de ; cycle hamiltonien visitant les sommets dans l'ordre de . On note un cycle optimal et le coût d'un chemin . Un sommet est ajouté à à chaque rencontre ; sur l'exemple, .
Q12. Quel algorithme pour l'étape 2 de l'algorithme 1 ? Sa complexité ?
Q13. Montrer .
Q14. Montrer .
Q15. Supprimer une visite d'un sommet dans n'augmente pas le coût.
Q16. En déduire la construction de .
Q17. Conclure : l'algorithme 1 est une 2-approximation.
Structures données (sommets codés par des entiers) :
// Structure de graphe
struct Graphe_s {
int n; // Nombre de sommets
int** C; // Matrice des coûts
};
typedef struct Graphe_s Graphe;
// Structure Arbre Couvrant de coût minimal
struct ACM_s {
int* parent; // Tableau indiquant le parent de chaque sommet dans l'arbre
int n; // Nombre de sommets de l'arbre
};
typedef struct ACM_s ACM;
// Structure Cycle Hamiltonien
struct CH_s {
int* cycle; // Sommets dans l'ordre d'apparition dans le cycle
int l; // Longueur du cycle = taille du tableau cycle
};
typedef struct CH_s CH;
ACM* Recherche_ACM(Graphe* G) est fournie ; elle alloue la structure et son tableau parent de taille , rien d'autre. Le fichier texte contient n p sur la première ligne, puis lignes s t c (une arête et son coût). On dispose de fopen, fclose, fscanf.
Q18. Graphe* creer_graphe(char* nom_fichier) lit le fichier.
Q19. void dfs(ACM* a, int s, int* chemin, int* indice) : parcours en profondeur depuis la racine s, chaque sommet exploré rangé dans chemin[*indice].
Q20. CH* calcule_CH(int* chemin, int n) : le cycle, alloué et refermé.
Q21. void free_ACM(ACM* a) et void free_CH(CH* cycle).
Q22. CH* TSP2(Graphe* G) : la 2-approximation, mémoire gérée.
Corrigé
Q12. Le sujet appelle « étape 2 » le calcul de l'arbre couvrant de coût minimal (c'est la légende de la figure). On utilise l'algorithme de Kruskal : trier les arêtes par coût croissant, puis les ajouter une à une en écartant celles qui fermeraient un cycle, détecté par une structure unir & trouver. Le graphe étant complet, : le tri coûte , puis les tests et au plus unions coûtent avec union par rang et compression des chemins, soit quasi linéaire en . Total : . (L'algorithme de Prim avec un simple tableau des distances ferait , optimal ici puisqu'il faut lire les coûts.) Le jury a aussi accepté la lecture « étape 2 parcours en profondeur de » : celui-ci coûte , l'arbre ayant sommets et arêtes, à condition de disposer des listes de fils.
Q13. Retirons une arête quelconque de : il reste un chemin passant par tous les sommets, connexe et à arêtes, donc un arbre couvrant de , de coût puisque les coûts sont positifs. étant de coût minimal parmi les arbres couvrants, . Ce que le correcteur attend : cette minoration de l'optimum par une quantité calculable, et non une tentative de transformer en cycle.
Q14. Pour un sommet de fils , le parcours produit (on note à la découverte puis à chaque retour d'un fils). Montrons par induction sur l'arbre que commence et finit par et que , où est le sous-arbre de racine . Pour une feuille, , de coût . Sinon, chaque commence et finit par (hypothèse d'induction), donc les pas consécutifs de sont ceux des plus, pour chaque , le pas et le pas :
Chaque arête de est donc parcourue exactement deux fois, une à la descente et une à la remontée : par Q13. (Sur l'exemple, a éléments pour les arêtes de .)
Q15. Soit un sommet qui figure plusieurs fois dans , et une de ses occurrences qui n'est pas aux extrémités de : On supprime cette occurrence : devient , ce qui est possible car est complet (l'arête existe, et si le pas coûte ). Le coût varie de
100 % gratuit
La suite du corrigé est sur Adloun
Le corrigé rédigé en entier, question par question, et le tuteur pour poser des questions sur ce sujet.
Voir le corrigé complet, gratuitementInscription gratuite en 30 secondes (e-mail, nom d'utilisateur, mot de passe, classe ou profil), sans carte bancaire : arrivée directe sur le corrigé.