数据结构
cuijiyue
这个作者很懒,什么都没留下…
展开
-
最小生成树之kruskal
这个算法非常简单,是基于边的 从权值最小的边开始,依次加入到最小树中,如果当前边会和之前的边构成环路,那么不加入当前边,进行下一个边的加入,直到所有边都检测一遍。检测环路可以用一个顶点数组来标记,每加入一条边,就把顶点标记为1,如果当前边的两个顶点都已经被标记为1,那么表明这条边会和之前的边构成环路。 这个具体的证明还没有搞明白,代码就不写了,非常简单。原创 2013-08-20 11:06:43 · 708 阅读 · 0 评论 -
图的深度优先遍历和广度优先遍历
首先这里的操作都是基于邻接矩阵的。 深度优先遍历的过程是 首先从一个顶点V开始,输出当前的顶点。从当前顶点的一个邻接顶点开始,继续深度优先遍历。当然要排除掉已经遍历过的点。当前顶点的邻接顶点前全部遍历一遍 void DfsMgraph(const Mgraph* G,int i,bool * const visited) { visited[i]=true; printf("%2c"原创 2013-08-18 22:37:53 · 848 阅读 · 0 评论 -
二叉排序树--查询--插入--删除操作
首先是二叉排序树的概念: 二叉排序树是一个二叉树,对每一个节点来说,右子树上的值都比根节点大,左子树上的值都比根节点小。 那么在查询某个值key时,就需要遵循以下的步骤 首先和当前节点的值比较,相等则退出,当前节点的地址就是要查询的地址。key比当前节点值小,那么key如果存在的话一定在当前节点的左子树中,继续查询左子树。key比当前节点值大,那么key如果存在的话一定在当前节点的右原创 2013-08-18 22:06:38 · 842 阅读 · 0 评论 -
最短路径之Dijkstra
这个的思想和prim的思想很像。 首先假设已经找到k个顶点据入口距离最短的路径,剩余(n-k)个顶点距离入口的最短距离也知道。再寻找下一个加入路径的顶点时,首先寻找剩余(n-k)个顶点距离最短的顶点,加入路径。加入路径后需要更新剩余(n-k-1)个顶点距离入口的最短距离。由于新加入了第m=K+1个顶点,对于剩余的任意一个顶点Vi,只要比较Vi不经过Vm到入口的距离和经过Vm到入口的距离,如果原创 2013-08-16 17:06:45 · 671 阅读 · 0 评论 -
最小生成树算法之Prim
这个是通过考察顶点的关系来生成最小树的: 首先选取任意的一个顶点来做当前树的第一个顶点。考察图中剩下的其他顶点与当前树的距离,选取距离最短的一个顶点加入当前树中。重复上一步,直到所有的顶点已经加入到树中。 关键是怎么考察图中其他顶点与树的距离,这里树的距离是我自己定义的,就是当前顶点Vi的所有边中可以与树中顶点连接的边,其中权值即距离最小的边就是加入Vi到树中要选取的路径。 我们原创 2013-08-16 10:18:28 · 661 阅读 · 0 评论