Für eine gegebene DAG (gerichteter azyklischer Graph) ist jede ihrer topologischen Sortierungen eine Permutation aller Eckpunkte, wobei für jede Kante (u, v) in der DAG u vor v in der Permutation erscheint.
Ihre Aufgabe ist es, die Gesamtzahl der topologischen Sorten einer bestimmten DAG zu berechnen.
Regeln
- Sie können ein beliebiges Format verwenden, um das Diagramm darzustellen, z. B. die Adjazenzmatrix, die Adjazenzliste oder die Kantenliste, sofern Sie in Ihrer Codierung keine nützlichen Berechnungen durchführen. Sie können auch Dinge wie die Anzahl der Scheitelpunkte oder die Scheitelpunktliste in der Eingabe haben, wenn diese nützlich sind.
- Sie können davon ausgehen, dass das Diagramm in der Eingabe immer eine DAG ist (keine Zyklen).
- Ihr Programm sollte theoretisch für jede Eingabe funktionieren. Es kann jedoch fehlschlagen, wenn der grundlegende Ganzzahltyp in Ihrer Sprache überläuft.
- Die Namen von Scheitelpunkten können beliebige aufeinanderfolgende Werte in einem beliebigen Typ sein. Zum Beispiel: Zahlen, die bei 0 oder 1 beginnen. (Und natürlich nur, wenn Sie keinen Code in dieser Zahl speichern.)
- Das ist Code-Golf. Der kürzeste Code gewinnt.
Beispiel
Dies ist die gleiche Eingabe in verschiedenen Formaten. Ihr Programm muss nicht alle akzeptieren. Scheitelpunkte sind immer ganze Zahlen, die bei 0 beginnen.
Adjacency list:
[ [1 2 3 5] [2 4] [] [2] [] [3] ]
Adjacency matrix:
[ [0 1 1 1 0 1] [0 0 1 0 1 0] [0 0 0 0 0 0] [0 0 1 0 0 0] [0 0 0 0 0 0] [0 0 0 1 0 0] ]
Edge list:
6 [ [0 1] [0 2] [0 3] [0 5] [1 2] [1 4] [3 2] [5 3] ]
Es ist die Grafik in diesem Bild:
Die Ausgabe sollte sein:
9
Die topologischen Sorten sind:
[0 1 4 5 3 2]
[0 1 5 4 3 2]
[0 1 5 3 4 2]
[0 1 5 3 2 4]
[0 5 1 4 3 2]
[0 5 1 3 4 2]
[0 5 1 3 2 4]
[0 5 3 1 4 2]
[0 5 3 1 2 4]