版权声明:本文为博主原创文章,若有错误之处望大家批评指正!转载需附上原文链接,谢谢! https://blog.csdn.net/summer_dew/article/details/83044629
拓扑排序原理:https://blog.csdn.net/summer_dew/article/details/81604206
【逆拓扑排序】
- 从有向图中选择一个出度为0的顶点输出
- 删除1中的顶点,并且删除指向该顶点的全部边
- 重复上述两步,直到剩余的图中不存在出度为0的顶点为止
【求法】
- 方法一:拓扑排序修改中进行修改,将入度改成出度即可
- 方法二:深度优先遍历的方法
结点没有边的时候输出 --> 输出的是从尾到头的序列 --> 逆拓扑序列
void DFS(int v, ALGraph *pG) {
visit[v] = 1;
ArcNode *q = pG->vers[v].firstarc;
while (q!=NULL) {
if (visit[q->adjV]==0)
DFS(q->adjV, pG);
q=q->next;
}
Visit(v); //v的邻边都被访问过了,再输出
//第一个输出的,就是v没有邻边-->即末端的结点
}