拓扑排序
对于一个有向无环图,我们可以需要求一个特定的序列。
比如说一个很经典的例子,先修课程例子,必须先修完先修课程才能修本课。
graph LR A((A)) --> B((B)); A --> C((C)); B --> D((D)); C --> D;
graph LR B1((B)) --> D1((D)); C1((C)) --> D1;
graph LR; D2((D));
很简单的一个排序就是ABCD或者ACBD。
那么怎么通过程序得到这个拓扑排序呢
我们需要知道图中的点有出度和入度,当一个点没有入度,我们就可以知道这个点没有先修课程,这个点就可以当作目前的第一个选择。
然后我们选择了这个点,那么我们就需要把这点以及所有从这点出去的线都删除。然后再进行后续操作。
由此我们可以写出拓扑排序的模板
题意:问一个图是否有拓扑序列,点从0开始
1 |
|