Adloun

Corrigé X-ENS 2025 Informatique C MPI — Partie II (Q22 à Q31) : Déterminant par l'algorithme de Mahajan et Vinay

Sujet officiel du concours X-ENS, session 2025, épreuve Informatique C MPI. Corrigé rédigé par Ibrahim Alame.

Sujet officiel (PDF, site du concours)

Énoncé

En C, est A[i*n+j] ; calculs en . : sommets , arc de poids si .

Marche fermée () : arcs de , tête minimale et absente de l'intérieur ; longueur , poids produit des poids. Suite : têtes croissantes, longueur totale ; , , et .

: sommets , , et (, , : parité, tête, sommet courant, arcs parcourus). Arcs : (1) , poids ; depuis : (2) vers , poids , si et ; (3) vers , poids , si et ; (4) si , vers , poids . Admis : les chemins de à (resp. ) sont en bijection avec les suites positives (resp. négatives). : somme des poids des chemins de à ; couche : les . Fournis : Fourtable, create (table nulle, ), read, write, free(t) () :


int read_sqmatrix(int n, int *A, int i, int j);               /* Q22 */
void write_sqmatrix(int n, int *A, int i, int j, int val);   /* Q22 */
Fourtable *create(int n);
void write(Fourtable *t, int val, int p, int h, int v, int i);
int read(Fourtable *t, int p, int h, int v, int i);
Fourtable *initialise(int n);                                 /* Q29 */
Fourtable *remplit(int n, int *A);                            /* Q30 */
int determinant(int n, int *A);                               /* Q31 */

Q22. Écrire read_sqmatrix et write_sqmatrix, en .
Q23. Dessiner pour .
Q24. Graphe de gauche (poids ) : marche fermée de longueur , de tête .
Q25. Graphe du milieu : (1) marches fermées de longueur au plus ; (2) suites ; avec poids.
Q26. Même : arcs manquants, avec poids, de la figure de droite.
Q27. Pour une marche fermée et , montrer que les (, ) forment un chemin de ; en déduire qu'une suite positive donne un chemin de à .
Q28. Exprimer par la couche .
Q29. initialise(n) : sur la couche , en .
Q30. remplit(n, A) : toutes les couches, justifié.
Q31. determinant(n, A), mémoire libérée, justifié.

Corrigé

Q22. Le coefficient est la case i*n+j :


int read_sqmatrix(int n, int *A, int i, int j) {
  return A[i * n + j];
}

void write_sqmatrix(int n, int *A, int i, int j, int val) {
  A[i * n + j] = val;
}

Un calcul d'indice et un accès : . write_sqmatrix ne renvoie rien (type void).

Q23. Les quatre coefficients sont non nuls : a une boucle sur chaque sommet et un arc dans chaque sens.

Arcs : de poids , de poids , de poids , de poids (l'arc porte : ligne , colonne ).

Q24. : les arcs , , existent, la tête est le plus petit sommet et n'apparaît qu'aux extrémités ; longueur . (C'est la seule : une marche de tête évite , et le seul arc entrant dans vient de .)

Q25. Les arcs sont de poids , de poids , de poids , de poids et de poids ; ici .

(1) Marches fermées de longueur au plus , classées par tête :

(2) Suites de marches fermées (têtes croissantes, longueur totale ) :

Il n'y en a pas d'autre : une suite commençant par la tête n'a que la marche de longueur , et une suite de tête est soit une marche de longueur , soit une marche de longueur suivie de la boucle en . Contrôle : les signes sont et est bien le déterminant de . (Énumération exhaustive exécutée : mêmes marches, mêmes suites.)

Q26. Ici , , , , , . Il manque cinq arcs :

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, gratuitement

Inscription gratuite en 30 secondes (e-mail, nom d'utilisateur, mot de passe, classe ou profil), sans carte bancaire : arrivée directe sur le corrigé.

Toutes les parties de l'épreuve

Corrigé complet gratuit →