数据结构——图

一、图的定义

图(Graph)是由顶点的有穷非空集合和顶点之间的集合组成,通常表示为:
  G(V,E),其中G表示一个图,
  V是图G中顶点的有限集,
  E是图G中边的有限集,
  边是V中顶点的有序或无序偶对。

注意
1、图中的数据元素称为顶点(Vertex)
2、在图结构中不允许没有顶点
3、图中,任意两个顶点之间都有可能有关系,顶点之间的逻辑关系用边来表示(边集可以为空)

边的划分
  • 无向边
    若顶点Vi到Vj之间没有方向,则称这条边为无向边(Edge),用无向序偶对(ViVj)表示。若图中任意两个顶点之间都是无向边,则称该图为无向图(Undirected graphs)。
  • 有向边
    若从顶点Vi到Vj的边有方向,则称这条边为有向边。也称为弧(Arc)。连接顶点Vi到Vj的有向边就是弧,Vi是弧尾,Vj是弧头,用<Vi,Vj>表示(不能写成<Vj,Vi>.
图的划分
  • 简单图:图中不存在顶点到自身的边且同一条边不重复出现
  • 无向图:图中任意两个顶点之间都是无向边
  • 有向图:图中任意两个顶点之间的边都是有向边
  • 完全图:在无向图中,如果任意两个顶点之间都存在边,则称该图为无向完全图;在有向图中,如果任意两点之间都存在方向互为相反的两条弧,则称该图为有向完全图。
  • 稀疏图:边(弧)少
  • 稠密图:边(弧)多
  • 连通图:在图G=(V,{E})中,任意两个顶点vi、vj ∈ \in E,vi和vj都是连通的。

子图: 假设有两个图G1和G2,图G2中的边和顶点包含于图G1,那么称G2是G1的子图

有些图的边或弧有与它相关的数字,这个数叫做(Weight),可以表示从一个点到另一个点的距离或耗费,这种带权的图通常称为(Network)。

图的边数

设图中顶点数为n,边数为e,则
有向图边数:0 ≤ \leq e ≤ \leq n(n-1)
无向图边数:0 ≤ \leq e ≤ \leq n(n-1)/2

有向完全图:e = n(n-1)
无向完全图:e = n(n-1)/2

注意: 在图的定义中不包含重复边和端点是同一个顶点的边

顶点的度

顶点V的度:关联于顶点V的边或弧的数目
有向图顶点V的入度:以顶点V为弧头的边数
有向图顶点V的出度:以顶点V为弧尾的边数

路径

路径:从一个顶点V出发,沿着边/弧到达另一个顶 点V’所经历的顶点序列
回路(环):起点和终点是同一个顶点的路径
简单路径/简单环:除了起点和终点外,路径上其余顶点不重复出现的路径/环
路径的长度:路径上边(弧)的数目

无向图的连通性

连通:如果无向图中顶点vi与Vj之间有路径,称vi与Vj是连通的
连通图:无向图中任意两个顶点之间都连通
连通分量:无向图的极大连通子图称为G的一个连通分量。

有向图的连通性

弱连通图:如果有向图去掉每条边的方向后得到的无向图是连通的,称该图是弱连通图。
单向连通图:如果有向图中任意两个顶点之间至少一个可达另一个,则称该有向图是单向连通图。
强连通:如果Vi到Vj有路径,Vj到Vi也有路径,称Vi到Vj是强连通的;
强连通图:有向图中任意两个顶点之间都强连通;
强连通分量:有向图的极大强连通子图称为该有向图的一个强连通分量

带权图(网)

图中每条边带有相应的权值的图也叫做网。

树:树是无回路的连通图
无向连通图的生成树:设G(V,E)是具有n个顶点的无向连通图,G的生成树是G的一个极小连通子图,它包含了G的n个顶点及构成树的n-1条边。

对非连通图G而言,其每个连通分量都具有相应的生成树,构成了G的生成森林。

术语总结

在这里插入图片描述

二、图的存储结构

1、邻接矩阵表示法

定义

图的邻接矩阵(Adjacency Matrix)表示法使用两个数组来表示图,一个以唯数组存储图中的顶点信息,一个二维数组(称为邻接矩阵)存储图中的边或弧的信息
在这里插入图片描述

2、邻接表表示法

定义

图的邻接表(Adjacency List)表示法,图中使用一个一维数组存储(也可使用单链表)顶点,并且每个数据元素还需存储指向第一个邻接点的指针,以便于查找该顶点的边信息。
图中每个顶点vi的所有邻接点构成一个线性表,由于邻接点的个数不定,使用单链表存储,无向图称为顶点vi的边表,有向图称为顶点vi作为弧尾的出边表。
在这里插入图片描述

三、图的遍历

1、深度优先遍历DFS(Depth_First_Search)

DFS遍历过程:

  1. 从图G中选某个顶点V作为出发点;
  2. 访问V;
  3. 依次从V的未被访问的邻接点出发,深度优先搜索遍历图G, 直至与V相通的顶点都被访问完;
  4. 如果此时图G中还有顶点未曾被访问,则从这些未被访问的顶点中再选一个顶点V,转2,继续遍历;否则遍历结束。

2、广度优先遍历BFS(Breadth_First_Search)

BFS遍历过程:

  1. 从图G的某个顶点v出发,访问v;
  2. 依次访问V的未被访问的邻接点;
  3. 再按照“先被访问顶点的邻接点先访问”的次序,依次访问这些邻接点的邻接点,直至图中所有已被访问的顶点的邻接点都被访问到;
  4. 若此时图中还有顶点未曾被访问,则另选一个未被访问的顶点v作为出发点,重复上述过程,直至图中所有的顶点都被访问完。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值