Adloun

Corrigé emlyon 2025 Maths appliquées ECG — Exercice 2 — Partie B (Q9 à Q12.b) : Coloration gloutonne d'un graphe en Python : voisins, plus petit entier absent, déroulé sur un graphe à six sommets, coloration à trois couleurs

Sujet officiel du concours emlyon, session 2025, épreuve Maths appliquées ECG. Corrigé rédigé par Ibrahim Alame.

Sujet officiel (PDF, site du concours)

Énoncé

est un graphe non orienté d'ordre , de sommets (confondus en Python avec leurs numéros), donné par sa matrice d'adjacence (un np.array). Deux sommets sont voisins s'ils sont distincts et reliés par une arête. Une coloration de est une application des sommets dans telle que deux sommets voisins aient des « couleurs » différentes.

Q9. Compléter une fonction voisins(A,i) (boucle sur j, test j != i and ..., ajout à une liste V) qui renvoie la liste des voisins de .
Q10. Écrire min_ext(L) renvoyant le plus petit entier naturel absent de la liste (algorithme suggéré : , puis augmenter tant qu'il appartient à ).
Q11. Compléter coloration(A), algorithme glouton : reçoit la liste ; pour de à , reçoit le plus petit entier absent de la liste des couleurs des voisins de ; on renvoie .
Q12. est le graphe à six sommets de la figure 3 du sujet (redessiné ci-dessous). (a) Donner la liste renvoyée par coloration(A). (b) admet-il une coloration à trois couleurs ? Si oui, en donner une.

Corrigé

Q9. Le sommet est voisin de lorsque et que le coefficient de la matrice d'adjacence vaut (arête entre et ). On ajoute alors à V le numéro j :


def voisins(A, i):
    n = len(A[i])
    V = []
    for j in range(n):
        if j != i and A[i, j] == 1:
            V.append(j)
    return V

len(A[i]) est la longueur de la ligne , c'est-à-dire l'ordre du graphe. Le test j != i écarte une éventuelle boucle (un sommet n'est pas son propre voisin, par définition). Avec un tableau numpy, A[i, j] et A[i][j] désignent le même coefficient. La fonction renvoie la liste des numéros des voisins, par ordre croissant.

Q10. On transcrit l'algorithme proposé ; le test d'appartenance d'un élément à une liste s'écrit m in L :


def min_ext(L):
    m = 0
    while m in L:
        m = m + 1
    return m

Terminaison : la liste est finie, donc l'un des entiers n'est pas dans , et la boucle s'arrête au plus tard pour . Correction : à la sortie, , et tous les entiers ont été trouvés dans ; est donc le plus petit entier naturel absent de . Exécution : min_ext([1, 0, 3]) renvoie 2, comme dans l'exemple du sujet.

Ce que le correcteur attend : m in L (appartenance) et non m == L (qui compare un entier à une liste et vaut toujours False).

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 →