def construire_bfs(graphe: dict, origine: str) -> dict: """ Construit un arbre BFS à partir de graphe et d'un sommet d'origine. Args: graphe (dict): Un dictionnaire représentant le graphe, où les clés sont les sommets et les valeurs sont des listes de sommets adjacents. origine (str): Le sommet de départ pour la recherche en largeur. Returns: dict: Un dictionnaire représentant l'arbre BFS, où les clés sont les sommets et les valeurs sont des tuples contenant la distance depuis l'origine et le sommet precédent. Examples: >>> graphe = { ... '1': ['2', '3'], ... '2': ['4', '5'], ... '3': ['6'], ... '4': [], ... '5': ['6'], ... '6': [] ... } >>> construire_bfs(graphe, '1') {'1': (0, None), '2': (1, '1'), '3': (1, '1'), '4': (2, '2'), '5': (2, '2'), '6': (2, '3')} >>> graphe = { ... 'A': ['B', 'C'], ... 'B': ['D'], ... 'C': ['E'], ... 'D': [], ... 'E': [] ... } >>> construire_bfs(graphe, 'A') {'A': (0, None), 'B': (1, 'A'), 'C': (1, 'A'), 'D': (2, 'B'), 'E': (2, 'C')} """ couleur = dict() resultat = dict() for som in graphe.keys(): couleur[som] = 0 frontiere = [origine] resultat[origine] = (0, None) couleur[origine] = 1 while len(frontiere) > 0: courant = frontiere.pop(0) longueur, precedent = resultat[courant] for som in graphe[courant]: if couleur[som] == 0: frontiere.append(som) resultat[som] = (longueur + 1, courant) couleur[som] = 1 couleur[courant] = 2 return resultat def construire_dfs(graphe: dict, origine: str) -> dict: """ Construit un arbre DFS à partir de graphe et d'un sommet d'origine. Args: graphe (dict): Un dictionnaire représentant le graphe, où les clés sont les sommets et les valeurs sont des listes de sommets adjacents. origine (str): Le sommet de départ pour la recherche en profondeur. Returns: dict: Un dictionnaire représentant l'arbre DFS. Examples: >>> graphe = { ... '1': ['2', '3'], ... '2': ['4', '5'], ... '3': ['6'], ... '4': [], ... '5': ['6'], ... '6': [] ... } >>> construire_dfs(graphe, '1') {'1': (0, None), '2': (1, '1'), '3': (1, '1'), '6': (2, '3'), '4': (2, '2'), '5': (2, '2')} >>> graphe = { ... 'A': ['B', 'C'], ... 'B': ['D'], ... 'C': ['E'], ... 'D': [], ... 'E': [] ... } >>> construire_dfs(graphe, 'A') {'A': (0, None), 'B': (1, 'A'), 'C': (1, 'A'), 'E': (2, 'C'), 'D': (2, 'B')} """ couleur = dict() resultat = dict() for som in graphe.keys(): couleur[som] = 0 frontiere = [origine] resultat[origine] = (0, None) couleur[origine] = 1 while len(frontiere) > 0: courant = frontiere.pop() longueur, precedent = resultat[courant] for som in graphe[courant]: if couleur[som] == 0: frontiere.append(som) resultat[som] = (longueur + 1, courant) couleur[som] = 1 couleur[courant] = 2 return resultat if __name__ == "__main__": import doctest doctest.testmod(verbose=True) print(construire_dfs(g, '1'))