主要是对图算法作一总结.算法
最基本的图算法思想是dfs和bfs,dfs组要是用于考察图的结构时使用而bfs通常用于求解无权最短路径问题.shell
拓扑排序依赖于dfs算法,拓扑排序能够解决事件依赖关系,强连通分支问题以及单源最短路径问题.闭包
欧拉回路能够使用dfs解决.spa
汉密尔顿回路的存在性能够用拓扑排序解决.
排序
强连通分支问题的解法能够使用拓扑排序的解法,也能使用tarjan,二者都会用到dfs.事件
最小生成树问题能够使用kruskal或者prim来解决.扩展
单源最短路径问题能够使用Bellman-ford或者dijkstra来解决,但dijkstra不能解决负权环问题,二者都依赖于路径路径松弛技术.无环路图能够使用拓扑排序对Bellman-ford解法提速.搜索
单源最短路径问题也能够扩展来解决差分式约束系统.
im
多源最短路径能够使用矩阵乘法或者Floyd-warshell来解决,二者都是动态规划解法.技术
闭包传递问题的思想是若是只考虑是否可到,那么就能够将路径是否可达用0,1表示,经过与或运算来进行路径是否可达的递推。根本的解法仍是依赖于前面的算法.
此外,对于不一样场景使用回溯来减小路径搜索很重要.