图 Graph ——基本概念及存储

一、基本概念:

       1、图(Graph):图G由两个集合组成:一个由顶点(vertex)构成的有穷非空集合和一个由边(edge)构成的有穷允空集合。

       2、表示:

            (1)顶点集:V(G)

            (2)边集:E(G)

            (3)图:G=(V,E)

        3、无向图(undirected graph):表示边的两个顶点之间没有次序关系的图。


        4、有向图(directed graph):表示边的顶点对有方向的图。<v0,v1>表示以顶点v0为尾(tail),以顶点v1为头(head)的边。


        5、图的表示:

              (1)无向图的边:(v1, v2)

              (2)有向图的边:<v1, v2>

              (3)无向图的表示:

                         V(G)={0, 1, 2, 3}          E(G)={(0,1),(0,2),(0,3),(1,2),(1,3),(2,3)}

              (4)有向图的表示:

                         V(G)={0,1,2}    E(G)={<0,1>,<1,0>,<1,2>}

        6、图的限制:

             (1)图中不能有从顶点i到其自身的边,也就是说边(vi,vi)和<vi,vi>是不合法的。这样的边称为自身环(self loops)。

             (2)同一条边在图中不能出现两次或两次以上。不满足这个限制的图称为多重图(multigraph)。

        7、完全图(complete graph):是具有最多边数的图。

              一个具有n个顶点的:

             (1)无向图:边数的最大值  n(n-1)/2

             (2)有向图:边数的最大值  n(n-1)

        8、相邻(adjacent)、关联(incident):

              (v0, v1)是无向图中的一条边,则称顶点v0和v1是相邻的,并称边(v0, v1)与顶点v0和v1关联。

        9、邻接、关联:

              <v0, v1>是有向图的一条边,则称顶点v0邻接到顶点v1,而称v1邻接于v0,并称边<v0, v1>与顶点v0和v1关联。

        10、子图(subgraph):

                是这样一个图G',G'满足

        11、路径(path):从顶点Vp到Vq的一条路径是有顶点序列构成的边组成。

        12、路径长度(length):路径上边的条数。

        13、简单路径(simple path):路径上除了起点和终点可能相同外,其余顶点都互不相同。

                无向图中可以用顶点序列来表示一条简单路径。

                有向图中也可以用顺序顶点序列来表示一条简单有向路径。

        14、回路或环路(cycle):是一条起点和终点相同的简单路径。

        15、连通(connected):

                (1)定义:在无向图中,如果从顶点V0到V1存在一条路径,则称顶点V0和V1是连通的。

                (2)无向图连通:无向图中的每对顶点Vi和Vj,都存在一条从Vi到Vj的路径。

                (3)联通分支(connected component):简称分支,是无向图中的极大连通子图。

                (4)强连通(strongly connected)图:在有向图中,如果每对不同的顶点Vi和Vj,都存在从Vi到Vj以及从Vj到Vi的有向路径,则称有向图是强连通的。

                (5)强连通分支(strongly connected component):是有向图的极大强连通子图。

        16、顶点的度(degree):

                (1)定义:是关联于该顶点的边的条数。

                (2)入度(in-degree):在有向图中,以v为头(即箭头指向v)的边的条数。

                (3)出度(out-degree):在有向图中,以v为尾的边的条数。

二、图的存储:

        1、邻接矩阵(adjacency matrices)

              假定G=(V,E)是一个包含(n>=1)个顶点的图,其邻接矩阵是一个n*n的二维数组。

              例如:adj_mat,如果(Vi,Vj)是图G中的一条边,即(Vi,Vj)属于E(G),则adj_mat[i][j] = 1,如果不存在这样的边,则adj_mat[i][j] = 0。

              (1)无向图的邻接矩阵一定是对称的。为了节省空间,无向图的邻接矩阵只需存储其上三角或下三角部分。

                        有向图的邻接矩阵不一定是对称的。

              (2)顶点的度:

                        对于一个无向图,任意一个顶点i的度等于其邻接矩阵中顶点i所对应的行中的数字之和。

                        对于一个有向图,顶点i所对应的行中的数字之和等于顶点i的出度,而对应的列中的数字之和等于顶点i的入度。

              (3)稀疏图(sparse graphs):边很少的图。

        2、邻接表(adjacency lists)

              (1)用n个链表代替邻接矩阵中n行。

              (2)图G中的每个顶点对应一个链表。链表中的结点结构至少要包含一个顶点域和一个链域。

              (3)对于任意给定的链表i(称为顶点i的邻接表),链表中的结点就是与顶点i相邻的所有顶点。每个链表都包含一个头结点,并且链表按照顶点序号的顺序排列。

              (4)在无向图的邻接表存储表示中,通过对某个顶点的邻接表中的结点计数,可以得到该顶点的度。该值也是关联该顶点的边的条数。

              (5)在有向图中,通过对某个顶点的链表中的结点计数,可以得到该顶点的出度。

              (6)逆邻接表(inverse adjacency lists):

                       与邻接表相同:每个顶点都对应一个链表。

                                       不同:逆邻接表中的每个链表存储的是邻接到(对应与邻接于)对应顶点的所有顶点。

                      下面是逆邻接表的结构,用来表示图中的一条边。

逆邻接表的结构组成
头的列链尾的行链

        3、邻接多重表(adjacency multilists)     

              (1)在无向图的邻接表存储中,每一条边(Vi,Vj)都表示两项:一项在顶点Vi的邻接表中,而另一项在顶点Vj的邻接表中。某些时候,需要方便地找到第二项,并对已扫描的边作上标记。这时多重表结构将有利于这种操作。

              (2)在多重表中,各链表中的结点可以被几个链表共享。图中的每一条边只对应于一个结点。而这个结点出现在该边所关联的两个顶点的每个邻接链表中。

邻接多重表的结点结构
markedvertex1vertex2path1path2





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值