#P1843. 【算法】【19】Gold King浅涉拓扑

【算法】【19】Gold King浅涉拓扑

问题说明

拓扑是研究几何图形或空间在连续改变形状后还能保持不变的一些性质的一个学科。Gold King的涉猎范围广泛,兜兜转转一圈后,还是踏入了拓扑大门,但是一入大门深似海,从此回头不由人。
拓扑大门里外围级的研究,Gold King选择了拓扑排序进行了深入,这是检测图中是否存在环的一个好方法。拓扑排序是对有向无圈图顶点的一种排序,它使得如果存在一条从顶点vi到顶点vj的有向路径,那么在排序中vj处于vi后面。
算法思想是:先找出任意一个没有入边的顶点。然后显示出该顶点,并将它和它的边一起从图中删除。然后对图中剩余的点和边用同样的方法处理。



输入格式

第一行输入两个整数n和m,表示有n个顶点和m条边。 接下来输入m行,每行两个整数vivj,表示从顶点vi到顶点vj有一条有向边。

输出格式

输出拓扑排序结果,如果图中存在环,则输出“has circle.”。
我们拓扑排序结果不唯一,本题采用栈的方式来存储满足没有入边顶点的数据。
样例1输入:
4 4
1 2
1 3
4 3
2 4
样例2输入:
3 3
1 2
2 3
3 1
样例3输入:
7 12
1 2
4 3
1 4
2 5
2 4
3 6
4 6
1 3
4 7
5 4
5 7
7 6
样例1输出:
1 2 4 3
样例2输出:
has circle.
样例3输出:
1 2 5 4 3 7 6

提示

2<=n<=m<=30


来源/分类

算法培训-19-图论深入