详谈数据结构--图

文章目录

      • 1. 图的概念
      • 2. 图的存储
        • 2.1 邻接矩阵
        • 2.2 邻接表
      • 3. 图的遍历
        • 3.1 深度优先遍历(DFS)
        • 3.2 广度优先遍历(BFS)
      • 4. 最短路径
        • 4.1 Dijkstra算法
        • 4.2 Floyd算法
      • 5. 最小生成树--Prim算法

图(Graph)是由顶点和连接顶点的边构成的离散结构。在计算机科学中,图是最灵活的数据结构之一,很多问题都可以使用图模型进行建模求解。例如:生态环境中不同物种的相互竞争、人与人之间的社交与关系网络、化学上用图区分结构不同但分子式相同的同分异构体、分析计算机网络的拓扑结构确定两台计算机是否可以通信、找到两个城市之间的最短路径等等。

1. 图的概念

图的结构很简单,就是由顶点 V VV 集和边 E EE 集构成,因此图可以表示成 G = ( V , E ) G=(V, E)G=(V,E) 。
图1-1:无向图
图1-1:无向图1

图1-1就是无向图,我们可以说这张图中,有点集 V = { 1 , 2 , 3 , 4 , 5 , 6 } V={1, 2, 3, 4, 5, 6}V={1,2,3,4,5,6},边集E = { ( 1 , 2 ) , ( 1 , 5 ) , ( 2 , 3 ) , ( 2 , 5 ) , ( 3 , 4 ) , ( 4 , 5 ) , ( 4 , 6 ) } E={(1, 2), (1, 5), (2, 3), (2, 5), (3, 4), (4, 5), (4, 6)}E={(1,2),(1,5),(2,3),(2,5),(3,4),(4,5),(4,6)} 。在无向图中,边( u , v ) (u, v)(u,v)和边( v , u ) (v, u)(v,u)是一样的,因此只要记录一个就行了。简而言之,对称。
图1-2:有向图
图1-2:有向图 2
有向图也很好理解,就是加上了方向性,顶点( u , v ) (u, v)(u,v)之间的关系和顶点( v , u ) (v,u)(v,u)之间的关系不同,后者或许不存在。例如,地图应用中必须存储单行道的信息,避免给出错误的方向。

加权图:与加权图对应的就是无权图,如果觉得不好听,那就叫等权图。如果一张图不含权重信息,我们就认为边与边之间没有差别。不过,具体建模的时候,很多时候都需要有权重,比如对中国重要城市间道路联系的建模,总不能认为从北京去上海和从北京去广州一样远(等权)。

还有很多细化的概念,有兴趣的自己了解咯。我觉得就没必要单独拎出来写,比如:无向图中,任意两个顶点间都有边,称为无向完全图;加权图起一个新名字,叫网(network)……然而,如无必要,毋增实体。

两个重要关系:

  • 邻接(adjacency):邻接是两个顶点之间的一种关系。如果图包含( u , v ) (u,v)(u,v),则称顶点v vv与顶点u uu邻接。当然,在无向图中,这也意味着顶点u uu与顶点v vv邻接。
  • 关联(incidence):关联是边和顶点之间的关系。在有向图中,边( u , v ) (u,v)(u,v)从顶点u uu开始关联到v vv,或者相反,从v vv关联到u uu。注意,有向图中,边不一定是对称的,有去无回是完全有可能的。

细化关联这个概念,就有了顶点的入度(in-degree)**和**出度(out-degree)。无向图中,顶点的度就是与顶点相关联的边的数目,没有入度和出度。在有向图中,我们以图1-2为例,顶点10有2个入度,3 → 10 3\rightarrow103→10,11 → 10 11\rightarrow1011→10,但是没有从10指向其它顶点的边,因此顶点10的出度为0。

路径(path):依次遍历顶点序列之间的边所形成的轨迹。注意,依次就意味着有序,先1后2和先2后1不一样。

简单路径:没有重复顶点的路径称为简单路径。说白了,这一趟路里没有出现绕了一圈回到同一点的情况,也就是没有
图1-3:四顶点的有向带环图
图1-3:四顶点的有向带环图3

:包含相同的顶点两次或者两次以上。图1-3中的顶点序列< 1 , 2 , 4 , 3 , 1 > <1,2,4,3,1><1,2,4,3,1>,1出现了两次,当然还有其它的环,比如< 1 , 4 , 3 , 1 > <1,4,3,1><1,4,3,1>。

你可能感兴趣的:(图,算法,数据结构)