Per una data DAG (grafo aciclico diretto), ciascuno dei suoi tipi topologici è una permutazione di tutti i vertici, dove per ogni bordi (u, v) nel DAG, u compare prima v nella permutazione.
Il tuo compito è calcolare il numero totale di specie topologiche di un determinato DAG.
Regole
- È possibile utilizzare qualsiasi formato per rappresentare il grafico, come matrice di adiacenza, elenco di adiacenza o elenco di bordi, purché non si eseguano calcoli utili nella codifica. Puoi anche avere elementi come il conteggio dei vertici o l'elenco dei vertici nell'input, se sono utili.
- Puoi supporre che il grafico nell'input sia sempre un DAG (non ha alcun ciclo).
- Il tuo programma dovrebbe funzionare in teoria per qualsiasi input. Ma può fallire se supera il tipo intero di base nella tua lingua.
- I nomi dei vertici possono essere qualsiasi valore consecutivo in qualsiasi tipo. Ad esempio: numeri che iniziano da 0 o 1. (E solo se non si memorizza il codice in questo numero, ovviamente.)
- Questo è code-golf. Il codice più corto vince.
Esempio
Questo è lo stesso input in diversi formati. Il tuo programma non deve accettarli tutti. I vertici sono sempre numeri interi che iniziano da 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] ]
È il grafico mostrato in questa immagine:
L'output dovrebbe essere:
9
I tipi topologici sono:
[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]