码迷,mamicode.com
首页 > 编程语言 > 详细

普林斯顿大学《算法II》第二周学习笔记 Directed Graph

时间:2015-05-02 16:26:11      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:

 有向图的遍历和无向图的遍历类似,主要是DFS和BFS。

对于DAG(Directed Acyclic Graph),还有一个很重要的拓扑的概念,拓扑排序的倒序可以用Depth-first search来生成,类似二叉树的后序遍历。
见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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!