Logo de kxs.frCours d'informatique pour le lycée et la prépa

Implémentation des graphes

Nous avons vu dans le cours sur les graphes, deux façons de représenter un graphe : par matrice d'adjacence ou par liste d'adjacence. Nous allons utiliser ces deux implémentations ici.

Matrice d'adjacence

Nous utiliserons le même graphe que le précédent :

1) Créez en Python la matrice d'adjacence de ce graphe.

graphe = [[0,1,1,0,0,0,0,0,0],
          [1,0,0,1,1,0,0,0,0],
          [1,0,0,0,1,1,1,0,0],
          [0,1,0,0,0,0,0,1,0],
          [0,1,1,0,0,0,0,1,0],
          [0,0,1,0,0,0,0,0,1],
          [0,0,1,0,0,0,0,0,1],
          [0,0,0,1,1,0,0,0,1],
          [0,0,0,0,0,1,1,1,0]]

2) (Dificile) Proposez une fonction matrice_largeur permettant de parcourir en largeur ce graphe. On utilisera une liste pour enregistrer les nœuds visités.

def matrice_largeur(graphe):
    alpha = "ABCDEFGHI" # Pour faire correspondre l'indice à la lettre
    visite = [0] # On commence par le nœud A (indice 0)
    f = [0] # On commence par le nœud A (indice 0)
    n = len(graphe) # taille de la matrice
    while f != []:
        x = f.pop(0)
        print(alpha[x]) # On affiche la lettre
        for i in range(n): # On parcourt les nœuds
            if graphe[x][i] == 1 and i not in visite: # Si le nœud est adjacent à x et est non visité
                visite.append(i) # On l'ajoute à visite
                f.append(i) # On l'ajoute à la liste des nœuds à visiter

3) (Plus dificile) Proposez une fonction matrice_profondeur permettant de parcourir en profondeur ce graphe.

def matrice_profondeur(graphe, indice, visite): # visite doit etre une liste vide
    alpha = "ABCDEFGHI" # Pour faire correspondre l'indice à la lettre
    n = len(graphe) # taille de la matrice
    visite.append(indice)
    print(alpha[indice]) # On affiche le nœud
    for i in range(n): # On parcourt les nœuds
        if graphe[indice][i] == 1 and i not in visite: # Si le nœud est adjacent à indice et est non visité
            matrice_profondeur(graphe,i,visite)

Liste d'adjacence

Nous utiliserons ici le même graphe que précédement.

4) Créez en Python les listes d'adjacence de ce graphe. (On utilisera un tableau à deux dimensions)

5) (Dificile) Proposez une fonction listes_largeur permettant de parcourir en largeur ce graphe. On utilisera une liste pour enregistrer les nœuds visités.

6) (Plus dificile) Proposez une fonction listes_profondeur permettant de parcourir en profondeur ce graphe.