Favicon
NSI Terminale

Correction : implémentation Python des graphes

Renvoi de la matrice d'adjacence


def dict_vers_matrice(g: dict)->list[list]:
    """
    Fonction qui renvoie la matrice d'adjacence du graphe
    Entrée :
    	G = le Graphe
    Sortie :
        liste de listes implémentant la matrice d'adjacence )
    """
    
    sommets = [s for s in g.keys()] # récupération de la liste des sommets ( clés du dictionnaire )
    
    # création de la matrice avec tous ses éléments à 0
    # la matrice a autant de lignes/de colonnes qu'il y a de sommets dans le dictionnaire    
    adjacence = [[0 for j in range(len(g))] for i in range(len(g))] 
    
    for i in range(len(adjacence)): # pour chaque ligne de la matrice,
        id1 = sommets[i] # id du sommet correspondant à la ligne 'i' dans le tableau 'sommets'
        for j in range(len(adjacence[0])): # pour chacune des colonne de la matrice,
            id2 = sommets[j] # id du sommet correspondant à la colonne 'j'
            if id2 in g[id1]: # si 'j' est dans la liste des voisins de 'i' ...
                adjacence[i][j] = 1 # ...on met 1 dans la case [î][j] de la matrice ( sinon, on laisse 0 )

    return adjacence
			

Fonction de dessin d'un graphe


from graphviz import Digraph

def dessine_graphe(g):
	
    d = Digraph() # graphe orienté par défaut, fait apparaître les flèches

    for sommet, voisins in g.items(): # parcours du dictionnaire des listes d'adjacences du graphe ( par clé ET valeur )
        for voisin in voisins: # parcours des voisins du sommet
            if isinstance(voisin, tuple): # graphe pondéré ?
                d.edge(sommet , voisin[0], label = voisin[1]) # création d'un arc entre les deux sommets avec label = poids
            else:    
	             d.edge(sommet , voisin)  # création d'un arc entre les deux sommets, sans label
	
    d.view() # affichage du graphe