class Graphe(object): def __init__ (self, N): self. N = N self. arcs = [ [] for i in range (N)]
def ajouteArc (self, n1, n2): self. arcs [n1]. append (n2) self. arcs [n2]. append (n1)mais cela n'est pas très satisfaisant car si on ajoute deux fois le même arc, celui-ci apparaît deux fois. Avant d'ajouter, un successeur à un nœud, il vaut mieux tester s'il est déjà présent dans la sous-liste ou pas :
def ajouteArc (self, n1, n2): if not n2 in self. arcs [n1]: self. arcs [n1]. append (n2) if not n1 in self. arcs [n2]: self. arcs [n2]. append (n1)
def existeChemin (self, n1, n2): ...
def composantes (self): listeNonParcourus = [i for i in range (self. N)] numeroComposantes = [0 for i in range (self. N)] compteur = 0 while listeNonParcourus != []: noeud = listeNonParcourus [0] LNA = [] for i in range (1, len (listeNonParcourus)): if not self. existeChemin (noeud, i): LNA. append (listeNonParcourus [i]) numeroComposantes [listeNonParcourus [i]] = compteur + 1 compteur = compteur + 1 listeNonParcourus = LNA
On va générer des graphes aléatoires, c'est-à-dire pour un nombre de nœuds fixé, on crée un certain nombre d'arcs aléatoirement. On se donne un paramètre (proportion) qui contrôle le nombre d'arcs du graphe.
La forme générale de la fonction est la suivante :
Écrire une fonction qui fait cela.
def genereGrapheAleatoire (N, proportion): ga = Graphe (N) nbarcs = int (proportion * N * (N - 1) / 2) arcs = [[] for i in range (N)] for i in range (nbarcs): a = randint (0, N - 1) b = randint (0, N - 1) while (a == b) or (a in arcs [b]) or (b in arcs [a]): a = randint (0, N - 1) b = randint (0, N - 1) arcs [a]. append (b) arcs [b]. append (a) ga. ajouteArc (a, b) return (ga)