#!/usr/bin/env python3 import itertools def sommet2str(sommet): gauche = "".join(str(p) for p in sorted(sommet[0])).replace("10", "X") droite = "".join(str(p) for p in sorted(sommet[1])).replace("10", "X") if sommet[2] == 0: gauche += "T" else: droite += "T" return f"{gauche}|{droite}" if __name__ == "__main__": # [GAUCHE, DROITE, position de la torche] initial = [{1, 2, 3, 10}, set(), 0] initial2 = [{1, 2, 3, 10}, set(), 0] todo = [initial] done = [] print("strict graph {") while todo: sommet = todo.pop() done.append(sommet) gauche, droite, torche = sommet for passagers in itertools.chain(itertools.combinations(sommet[torche], 1), itertools.combinations(sommet[torche], 2)): nouveau = [gauche.copy(), droite.copy(), 1-torche] nouveau[torche] -= set(passagers) nouveau[1-torche] |= set(passagers) print(""" "{}" -- "{}" [label="{}"]""".format( sommet2str(sommet), sommet2str(nouveau), max(passagers), )) if nouveau not in todo and nouveau not in done: todo.append(nouveau) print("}")