随笔分类 - 图算法
摘要:1.概念 最小生成树针对的对象是无向连通帯权图,目的是生成一棵总权重最小的连通图,因为最小的连通图一定是树,那么实际上找到的一定是一棵最小权重的树,称之为最小生成树。 2.算法标签 贪心,根据贪心策略的不同,当贪心的是边的时候,为Kruskal算法,当贪心的是点的时候,为Prim算法 3.最小生成树的形成 安全边的概念 最小生成树肯定存在,有可能不止一棵,若...
阅读全文
摘要:遍历操作是图算法的基本操作,对于图的遍历,主要有两种,一种是深度遍历,一种是广度遍历。虽然这种操作很基本,但是稍微加一些其他的元素进去就能形成很有用的算法,比如加一些限制就可以变成深度或者广度搜索。 图遍历算法的特点是需要用一个visit数组保存各个节点是否已经被访问过的信息,对于深度遍历,一般都是递归操作,对于广度遍历,一般是用先入先出队列实现。下面是相应的代码,其他需要的头文件在之前的...
阅读全文
摘要:1.Floyd-Warshall 算法 给定一张图,在o(n3)时间内求出任意两点间的最小距离,并可以在求解过程中保存路径 2.Floyd-Warshall 算法概念 这是一个动态规划的算法。 将顶点编号,假设依次为0,1,2…n-1,现在假设DP[i][j][k]表示从i出发,结束于j的满足经过结点的编号至多为k的最短路径,由此性质易知,在易知DP[i][j][k]...
阅读全文
摘要:1.算法标签 BFS 2.算法概念 Bellman-Ford算法有这么一个先验知识在里面,那就是最短路径至多在N步之内,其中N为节点数,否则说明图中有负权值的回路,这样的图是找不到最短路径的。因此Bellman-Ford算法的思想如下,进行N次循环,在第 k 次循环中用dist数组记录 k 步之内到达各个顶点的最短路径长度,记做distk,然后在第k+1次循环中,遍历每条边,...
阅读全文
摘要:今天想练习一下图算法,有些图算法的基础数据结构是邻接表,于是想着用C实现一下,虽说wiki上有一个邻接表的实现,但是自己还是想练一下手,在网上也搜到了别人的邻接表实现,发现大同小 异,然后就在别人的基础上修改了一下得到了这个版本,记录一下,供以后练习使用。 1.邻接表概念 一张图,如果不考虑空间占用问题的话,用邻接矩阵存储是最方便的了,但有时候,图很稀疏,用矩阵存储就不划算了...
阅读全文
摘要:1.算法标签 贪心 2.算法描述 具体的算法描述网上有好多,我觉得莫过于直接wiki,只说明一些我之前比较迷惑的。 对于Dijkstra算法,最重要的是维护以下几个数据结构: 顶点集合S : 表示已经找出从源点出发最短路径的顶点集合 顶点集合Q: S在所有顶点集合中的补集,即V-S 距离数组dist : 在程序执行过程中,如果序号为...
阅读全文