最近在学习一些图算法,看到了拓扑排序,这个算法上学期数据结构课上就学过,不过当时没有重视,早就忘光了,刚才好好看了一遍。拓扑排序是一个简单的算法,很容易理解,其思想是:找到图中入度为0的一个顶点并输出它,将以这个定点为起点的边全部删掉,然后再在剩余的点集中找到一个入度为0的点,重复这个过程,直至将全部点输出。
拓扑排序算法的证明:在点集中找入度为0的点的实际意义是:找到不需要前提的工作,将这个工作做完后,以这个工作为前提的其他工作也就不需要这个工作做前提了,在图上的意义就是将以这个点为起点的边全部删除,重复这个过程直至输出全部的点。如果在中途找不到入度为0的点,那么也就代表当时剩的工作全部需要前提工作,也就是图中存在环,故此时不能进行拓扑排序。
拓扑排序实现如下: