摘要: 单源最短路径 Dijkstra算法: 基本算法: 将图G中所有的顶点V分成两个顶点集合Va和Vb。如果源点S到u的最短路径已经确定,则点u属于集合Va,否则属于集合Vb。最开始的时候Va只包含源点S,其余的点属于Vb,算法结束时所有由源点S可达的点属于Va,其他点仍然留在Vb中。可以在求出最短路径长度的同时记录最短路径,方法是记录终点的前一个点,这样只要倒着查回去就能确定整条最短路径。 具体步骤: (1)首先初始化,将源点S到图中各点的直接距离当做初始值记录为S到各点的最短距离,如果不能直接到达,记为INF,S到S的距离为0。 (2)在所有属于Vb的点中找一个S到其路径长度最短... 阅读全文
posted @ 2014-02-20 21:42 EtheGreat 阅读(392) 评论(0) 推荐(1) 编辑
摘要: 首先看一下三者的定义: 定义1 对于图G=(V,E)来说,最小支配集指的是从V中取尽量少的点组成一个集合,使得对于V中剩余的点都与取出来的点有边相连。也就是说,设V‘是图G的一个支配集,则对于图中的任意一个顶点u,要么属于集合V’,要么与V‘中的顶点相邻。在V’中出去任何元素后V‘不再是支配集,则支配集是极小支配集。称G的所有支配集中顶点个数最少的支配集为最小支配集,最小支配集中顶点的个数称为支配数。 定义2 对于图G=(V,E)来说,最小点覆盖指的是从V中取尽量少的点组成一个集合,使得E中所有的边都与取出来的点相连。也就是说,设V‘是图G的一个顶点覆盖,则对于图中的任意一条边(u... 阅读全文
posted @ 2014-02-20 18:47 EtheGreat 阅读(4703) 评论(0) 推荐(5) 编辑
摘要: 树上两点的最近公共祖先 对于有根树T的两个节点u和v,最近公共祖先LCA(T,u,v)表示一个接点x,满足x是u、v的祖先且x的深度尽可能大。对于点x来说,有一点非常特殊,那就是从u到v的路劲一定经过点x。 下面讨论用Tarjan算法求解该问题。 Tarjan算法基于深度优先搜索的框架,对于新搜索到的一个节点,首先创建由这个节点构成的集合,再对当前点的每个子树进行搜索,每搜索完一棵子树,则可以确定子树内的LCA询问都已解决。其他的LCA询问的结果必然在这个子树之外,这时把子树所形成的集合与当前节点的集合合并,并将当前节点设为这个集合的祖先。之后继续搜索下一棵子树,直到当前节点的所有子... 阅读全文
posted @ 2014-02-20 01:20 EtheGreat 阅读(560) 评论(0) 推荐(0) 编辑