Pour un DAG donné (graphe acyclique dirigé), chacune de ses sortes topologiques est une permutation de tous les sommets, où pour chaque arête (u, v) dans le DAG, u apparaît avant v dans la permutation.
Votre tâche consiste à calculer le nombre total de types topologiques d'un DAG donné.
Règles
- Vous pouvez utiliser n'importe quel format pour représenter le graphique, comme la matrice d'adjacence, la liste d'adjacence ou la liste de bords, tant que vous ne faites pas de calculs utiles dans votre codage. Vous pouvez également avoir des éléments comme le nombre de sommets ou la liste de sommets dans l'entrée, si ceux-ci sont utiles.
- Vous pouvez supposer que le graphique dans l'entrée est toujours un DAG (n'a pas de cycle).
- Votre programme devrait fonctionner en théorie pour toute entrée. Mais il peut échouer s'il déborde du type entier de base dans votre langue.
- Les noms des sommets peuvent être des valeurs consécutives de n'importe quel type. Par exemple: des nombres commençant à 0 ou 1. (Et seulement si vous ne stockez pas de code dans ce numéro, bien sûr.)
- C'est du code-golf. Le code le plus court gagne.
Exemple
Il s'agit de la même entrée dans différents formats. Votre programme ne doit pas tous les accepter. Les sommets sont toujours des entiers commençant à 0.
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] ]
C'est le graphique montré dans cette image:
La sortie doit être:
9
Les types topologiques sont:
[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]