求图中节点的单源最短路径可以使用Dijkstra,BellmanFord, SPFA算法,而对于有向无环图DAG来说,可以通过简单的动态规划来进行求解。 
    DAG的独特之处是所有节点可以线性化(拓扑序列),使得所有边保持从左到右的方向,如下图: 

思路 
    动态规划的递推需要一个线性或者树形的顺序,对于DAG,我们可以将节点按照拓扑顺序来进行线性化,这样就可以来进行递推。 
    拓扑顺序中节点v排在节点u之后,则只有可能从u到达v,而不能反过来;对于当前的节点v,在拓扑序列中向前查找,可能找到一些可以到达该顶点的其他节点,然后利用 dist[v] = min{dist[u] + w[u][v] | u 可以到达v} 来进行动态规划的递推。

伪码

DagShortestPath(G, w, s){
对节点按照拓扑顺序进行排序
topologically sort the nodes in G
初始化
for each vertex v in G{
dist[v] = INF;
pre[v] = NULL;
}
dist[s] = 0;
//根据拓扑顺序,遍历顶点v
for each v in G, taken in topologically sorted order{
for each edge w[u][v]{
if (dist[v] > dist[u] + w[u][v]){
pre[v] = dist[u] + w[u][v];
pre[v] = u;
}
}
}
}

最新文章

  1. script在html中的摆放位置
  2. wex5 实战 框架拓展之1 公共data组件(Data)
  3. ASP.NET三层架构之不确定查询参数个数的查询
  4. java判断request请求是手机还是pc终端
  5. UWP开发-重新理解MVVM
  6. Spring3.2.2之后不赞成使用queryForInt
  7. VBA中自定义类和事件的(伪)注册
  8. js 数组对象,数组的使用
  9. js/jquery/插件表单验证
  10. Code-Based Configuration (EF6 onwards)
  11. 微信网页授权redirect_uri错误的可能错误之一
  12. Spring Data JPA 简单查询--接口方法
  13. Yii2框架ACF(AccessControl Filter)的使用
  14. Python UnboundLocalError和NameError错误根源解析
  15. Echarts 设置地图大小
  16. django —— 邮件
  17. HDU 6106 Classes
  18. 【codeforces 24D】损坏的机器人
  19. Java泛型类型
  20. virtualbox+vagrant学习-2(command cli)-4-vagrant global-status命令

热门文章

  1. nginx 405 not allowed问题的解决
  2. dubbo_rpc原理
  3. [转]ListView学习笔记(二)——ViewHolder
  4. shell两个数字的运算,一共三个变量
  5. Hibernate- hibernate二级缓存
  6. eclipse-设置默认编码格式为UTF-8
  7. laravel 5.1 的程序性能优化(配置文件)
  8. ADC相关参数之---分辨率和精度
  9. IOC关注服务(或应用程序部件)是如何定义的以及他们应该如何定位他们依赖的其它服务
  10. APACHE服务器500错误解决方法