class Vrchol: def __init__(self, cislo): self.hrany = list() self.vstupni_stupen = 0 self.jmeno = chr(ord("A") + cislo) def toposort(graf): vysledek = list() for zacatek in graf: for konec in zacatek.hrany: konec.vstupni_stupen += 1 zasobnik = list() for vrchol in graf: if vrchol.vstupni_stupen == 0: zasobnik.append(vrchol) while zasobnik: vrchol = zasobnik.pop() vysledek.append(vrchol) for konec in vrchol.hrany: konec.vstupni_stupen -= 1 if konec.vstupni_stupen == 0: zasobnik.append(konec) for vrchol in graf: if vrchol.vstupni_stupen != 0: raise ValueError("Graf obsahuje cyklus") return vysledek graf = a, b, c, d, e, f = [Vrchol(i) for i in range(6)] for x, y in ((a, b), (a, c), (b, c), (b, d), (c, d), (c, e), (c, f), (e, d), (f, d), (f, e)): x.hrany.append(y) vysledek = toposort(graf) print (", ".join(vrchol.jmeno for vrchol in vysledek))