""" Question 1 - De fils en tapis But : en partant d'une liste des arêtes d'un graphe, compter le nombre de triangles qu'il contient Approche : Un triangle est un ensemble de trois sommets / trois arêtes relier les uns aux autres On peut donc ainsi parcourir l'ensemble des sommets, puis compter le nombre de voisins qui sont également voisins d'un autre voisin. Par exemple : a <-> b, b <-> c, c <-> a Parmi les voisins de a, b est aussi un voisin de c (lui-même voisin direct de a). Si aucune attention particulière n'est portée aux redondances, il faudra diviser par six le total obtenu, car chaque triangle aura été comptabilisé six fois, deux fois par sommet (p. ex. abc et acb pour le sommet a). """ def countTriangles(edges: list[tuple[int, int]]) -> int: neighbors: dict[int, set[int]] = {} for node1, node2 in edges: if node1 not in neighbors: neighbors[node1] = set() if node2 not in neighbors: neighbors[node2] = set() neighbors[node1].add(node2) neighbors[node2].add(node1) total: int = 0 for node1, neighbors1 in neighbors.items(): for node2 in neighbors1: neighbors2: set[int] = neighbors[node2] common: set[int] = neighbors1.intersection(neighbors2) total += len(common) return total // 6