拓扑排序的快速算法(有向无环图)
顶点集V = {1,2,3,4,5,6,7}
边集<起点,终点>
E = {<2,1>,< 3,2>,< 3,6>,<4,3>,<4,5>,<4,6>,<5,1>,<5,7>,<6,1>,<6,2>,<6,5>}
拓扑排序序列T = ()
算法如下:
1.在边集E中的寻找终点不存在顶点集的边,
在边集E中,终点没有属于顶点集的是4,所以4就是起点
2,删除所有边集中存在顶点4的边,得到以下边集
E1 = {<2,1>,< 3,2>,< 3,6>,<5,1>,<5,7>,<6,1>,<6,2>,<6,5>}
T = (4)
3.再在得到的边集中,寻找不存在顶点集的的点,除了已经删除的点
E1中没有属于顶点集的是3,所以删除E1中含有3的边,得到
E2 = {<2,1>,<5,1>,<5,7>,<6,1>,<6,2>,<6,5>}
T = (4,3)
重复上述步骤:
第三次删除顶点6
得到边集E3={<2,1>,<5,1>,<5,7>}
T = (4,3,6)
第四次删除顶点5
得到边集E4 = {<2,1>}
T = (4,3,6,5)
第五次删除顶点7
得到边集
E5 = {<2,1>}
T = (4,3,6,5,7)
第六次删除顶点2
得到边集
E6 = {}
T = (4,3,6,5,7,2)
最后只剩下1,加入到最后
最后得到了拓扑排序是:
4,3,6,5,7,2,1
补充:如果发现有两个或者以上可以删除的顶点,则要进另外判断。
在上述中第四次也可以删除顶点2
得到边集E4 = {<5,1>,<5,7>}
T = (4,3,6,2)
第五次删除顶点5
得到边集
E5 = {}
T = (4,3,6,2,5)
这次得到了空集,但是还有两个顶点没有删除,所以这条路走不通。