
数据结构之图
Ansel_m
阿里天猫
展开
-
(六)图的十字链表存储法详解
与邻接表不同,十字链表法仅适用于存储有向图和有向网。不仅如此,十字链表法还改善了邻接表计算图中顶点入度的问题。十字链表存储有向图(网)的方式与邻接表有一些相同,都以图(网)中各顶点为首元节点建立多条链表,同时为了便于管理,还将所有链表的首元节点存储到同一数组(或链表)中。其中,建立个各个链表中用于存储顶点的首元节点结构如图 1 所示:图 1 十字链表中首元节点结构示意图从图 1 可...转载 2019-03-20 16:46:51 · 3068 阅读 · 2 评论 -
Bellman-Ford 单源最短路径算法
Bellman-Ford 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法。该算法由Richard Bellman 和 Lester Ford 分别发表于 1958 年和 1956 年,而实际上 Edward F. Moore 也在 1957 年发布了相同的算法,因此,此算法也常被称为 Bellman-Ford-Moore 算法...转载 2019-03-26 10:15:42 · 1468 阅读 · 0 评论 -
dijkstra算法:寻找到全图各点的最短路径
dijkstra算法介绍:即迪杰斯特拉算法,是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题。迪杰斯特拉算法主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止,是一种广度优先的搜索方法。dijkstra算法原理:最优子路径存在。假设从S→E存在一条最短路径SE,且该路径经过点A,那么可以确定SA子路径一定是S→A的最短路径。证明:反证法。如果子路径SA不是最短的,那么就必...转载 2019-03-22 11:42:31 · 1857 阅读 · 0 评论 -
(五)图的邻接表存储法详解
通常,图更多的是采用链表存储,具体的存储方法有 3 种,分别是邻接表、邻接多重表和十字链表。本节先讲解图的邻接表存储法。邻接表既适用于存储无向图,也适用于存储有向图。在具体讲解邻接表存储图的实现方法之前,先普及一个"邻接点"的概念。在图中,如果两个点相互连通,即通过其中一个顶点,可直接找到另一个顶点,则称它们互为邻接点。邻接指的是图中顶点之间有边或者弧的存在。邻接表存储图的实现方式是,...转载 2019-03-18 11:49:59 · 2836 阅读 · 0 评论 -
(四)图的顺序存储结构及C语言实现
使用图结构表示的数据元素之间虽然具有“多对多”的关系,但是同样可以采用顺序存储,也就是使用数组有效地存储图。使用数组存储图时,需要使用两个数组,一个数组存放图中顶点本身的数据(一维数组),另外一个数组用于存储各顶点之间的关系(二维数组)。存储图中各顶点本身数据,使用一维数组就足够了;存储顶点之间的关系时,要记录每个顶点和其它所有顶点之间的关系,所以需要使用二维数组。不同类型的图,存储的方...转载 2019-03-18 11:38:50 · 1223 阅读 · 0 评论 -
(三)什么是生成树,生成树(生成森林)详解
在学习连通图的基础上,本节学习什么是生成树,以及什么是生成森林。对连通图进行遍历,过程中所经过的边和顶点的组合可看做是一棵普通树,通常称为生成树。图 1 连通图及其对应的生成树如图 1 所示,图 1a) 是一张连通图,图 1b) 是其对应的 2 种生成树。连通图中,由于任意两顶点之间可能含有多条通路,遍历连通图的方式有多种,往往一张连通图可能有多种不同的生成树与之对应。连通图...转载 2019-03-18 11:38:05 · 6039 阅读 · 2 评论 -
(一) 什么是图存储结构
阅读:1,220 作者:解学武(数据结构)图的存储结构完全攻略图什么是连通图我们知道,数据之间的关系有 3 种,分别是 "一对一"、"一对多" 和 "多对多",前两种关系的数据可分别用线性表和树结构存储,本节学习存储具有"多对多"逻辑关系数据的结构——图存储结构。图 1 图存储结构示意图图 1 所示为存储 V1、V2、V3、V4 的图结构,从图中可以清楚的看...转载 2019-03-18 11:36:52 · 3065 阅读 · 1 评论 -
最小生成树-Prim算法
Prim算法1.概览普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树。意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (graph theory)),且其所有边的权值之和亦为最小。该算法于1930年由捷克数学家沃伊捷赫·亚尔尼克(英语:Vojtěch Jarník)发现;并在1957年由美国计算机科学家罗伯特·普里姆(英...转载 2019-03-21 13:15:38 · 1400 阅读 · 0 评论 -
(七)图的邻接多重表存储法(超详细)
前面讲过,无向图的存储可以使用邻接表,但在实际使用时,如果想对图中某顶点进行实操(修改或删除),由于邻接表中存储该顶点的节点有两个,因此需要操作两个节点。为了提高在无向图中操作顶点的效率,本节学习一种新的适用于存储无向图的方法——邻接多重表。注意,邻接多重表仅适用于存储无向图或无向网。邻接多重表存储无向图的方式,可看作是邻接表和十字链表的结合。同邻接表和十字链表存储图的方法相同,都是独自...转载 2019-03-20 18:56:46 · 876 阅读 · 0 评论 -
Dijkstra 最短路算法
上周我们介绍了神奇的只有五行的 Floyd 最短路算法,它可以方便的求得任意两点的最短路径,这称为“多源最短路”。本周来来介绍指定一个点(源点)到其余各个顶点的最短路径,也叫做“单源最短路径”。例如求下图中的 1 号顶点到 2、3、4、5、6 号顶点的最短路径。与 Floyd-Warshall 算法一样这里仍然使用二维数组 e 来存储顶点之间边的关系,初始值如下。我们还需要用一个一...转载 2019-03-26 10:40:06 · 231 阅读 · 0 评论