Adloun

Degrés et formule d'Euler, en Python

Exercice d'entraînement · niveau 2 · mathématiques appliquées (ECG 1re année), chapitre 3 — Théorie des graphes · Graphes en Python

Énoncé

Un graphe non orienté est donné par sa matrice d'adjacence A, liste de listes de et de . Écrire une fonction degres(A) qui renvoie la liste des degrés, puis nb_aretes(A) qui renvoie le nombre d'arêtes. Écrire enfin verifie_euler(A) qui contrôle la formule d'Euler. Sur quelle hypothèse ces fonctions reposent-elles ?

Corrigé

Les fonctions.

def degres(A):
    n = len(A)
    d = []
    for i in range(n):
        s = 0
        for j in range(n):
            s = s + A[i][j]
        d.append(s)
    return d

def nb_aretes(A):
    return sum(degres(A)) // 2

def verifie_euler(A):
    return sum(degres(A)) == 2 * nb_aretes(A)

Ce que fait degres. Le degré du sommet est le nombre de de la ligne : c'est exactement la somme des coefficients de cette ligne, puisque les autres valent . La double boucle coûte additions.

Ce que fait nb_aretes. La formule d'Euler donne . On emploie la division entière //, car est un entier et que / renverrait un flottant — un détail qui compte si l'on veut ensuite indexer une liste.

L'hypothèse, et c'est le point important. Ces fonctions supposent le graphe non orienté et sans boucle : la matrice doit être symétrique et de diagonale nulle. Si A n'est pas symétrique, degres renvoie les degrés sortants, et la formule d'Euler ne s'applique pas (la somme des degrés sortants vaut , pas ). Si la diagonale n'est pas nulle, une boucle serait comptée une fois là où la convention usuelle la compte deux fois.

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.