标签:
有向图的遍历和无向图的遍历类似,主要是DFS和BFS。
见Depthfirst Order in Algs4
private void dfs(Digraph G, int v) {
marked[v] = true;
pre[v] = preCounter++;
preorder.enqueue(v);
for (int w : G.adj(v)) {
if (!marked[w]) {
dfs(G, w);
}
}
postorder.enqueue(v);
post[v] = postCounter++;
}
将postorder反转后就是有向无环图的拓扑排序。拓扑排序的其中一个现实应用场景就是当有多个任务可同时进行并且任务之间有先置关系是的调度决策。
编程练习
WordNet
这个project虽然定义中有一个shortest ancestor,但他不是一棵树,而且边的指向是从儿子->父亲,我用的方法是分为两个输入节点各自做一次DFS,并且记下每个节点到起始节点的距离,得到两个数组depthA,deptahB,分别代表每个节点到A和B的距离,然后就是找到min(depthA[i] +deptahB[i]) (0<=i<n) 即可。
普林斯顿大学《算法II》第二周学习笔记 Directed Graph
标签:
原文地址:http://www.cnblogs.com/tessitan/p/4472032.html