Cours sur les graphes en L2 MIASHS - UCO de Rezé:
- Le Poly et les sources TEX du chapitre.
- Le Diapo
- la Page GITHUB du cours
- Le début de la classe graphe :
Python
#!/usr/bin/python # -*- coding: utf-8 -*- from graphviz import Graph from dataclasses import dataclass from typing import Dict, Set @dataclass class Graphe: """ On définit un graphe à l'aide du dictionnaire des adjacents Par exemple : g = Graphe({{'1': {'2', '4', '3'}, '2': {'3'}, '3': {'4'}}}) """ dict_adj: Dict[str, Set[str]] def sommets(self) -> Set[str]: """ Donne l'ensemble des sommets """ s = set(self.dict_adj.keys()) for v in self.dict_adj.values(): s |= v return s def adjacents(self, a): """ Méthode pour avoir l'ensemble des adjacents d'un sommet """ s = set([]) if a in self.sommets(): if a in self.dict_adj: s = set(self.dict_adj[a]) for v in self.dict_adj: if a in self.dict_adj[v]: s |= {v} return s def __repr__(self): """ Affichage dans le terminal""" r = '' for v in sorted(list(self.sommets())): r += ('\t' + v + ' -> { ') for u in sorted(list(self.adjacents(v))): r += (u + ' ') r += '}\n' return r def dot(self, name: str = 'graphe') -> None: """ Sortie graphique, ici au format PNG, à l'aide de Graphviz """ d = Graph() d.node_attr.update(style='filled', color="#00ff005f") for v in self.dict_adj: d.node(v) for u in self.dict_adj[v]: d.edge(v, u) d.render(name, view=True, format='png')
qui s'utilise ainsi:
Python
In [74]: g = Graphe({'1': {'2', '4', '3'}, '2': {'3'}, '3': {'4'}}) In [75]: g Out[75]: 1 -> { 2 3 4 } 2 -> { 1 3 } 3 -> { 1 2 4 } 4 -> { 1 3 } In [76]: g.dot('graphe1') In [77]: g.sommets() Out[77]: {'1', '2', '3', '4'} In [78]: g.adjacents('4') Out[78]: {'1', '3'}