对于给定的DAG(有向无环图),其每个拓扑排序都是所有顶点的排列,其中,对于DAG 中的每个边(u,v),在排列中,u出现在v之前。
您的任务是计算给定DAG的拓扑种类总数。
规则
- 您可以使用任何格式来表示图,例如邻接矩阵,邻接列表或边列表,只要您不对编码进行有用的计算。如果有用,您也可以在输入中包含诸如顶点数或顶点列表之类的东西。
- 您可以假设输入中的图形始终是DAG(没有任何循环)。
- 理论上,您的程序应该可以进行任何输入。但是,如果它溢出您语言中的基本整数类型,它可能会失败。
- 顶点名称可以是任何类型的任何连续值。例如:以0或1开头的数字。(当然,仅当您不使用该数字存储代码时)。
- 这是代码高尔夫球。最短的代码获胜。
例
这是相同的输入,但格式不同。您的程序不必全部接受。顶点始终是从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] ]
这是此图中显示的图形:
输出应为:
9
拓扑排序为:
[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]