第7张图的概念

什么是图?

图是由顶点的有穷非空集合和顶点间之间的边的集合组成。通常表示为G(V,E)。
V是顶点的集合,E是边的集合。

各种图定义

无向边
若顶点vi到vj之间的边没有方向,则称这条边为无向边。用无序偶对(v1,v2)来标示。
无向图
如果图中任意两个顶点间的边都是无向边,则称该图为无向图。
无向完全图
如果任意两个顶点都存在边,则称该图为无向完全图。

有向边
若顶点vi到vj之间的边有方向,则称这条边为有向边,也称弧(Arc),用有序偶对,vi称为弧尾(Tail),Vj称为弧头。
有向图
如果途中任意两个顶点之间的边都是有向边,则称该图为有向图。
有向完全图
如果任意两个顶点间都存在方向互为相反的两条弧,则称该图为有向完全图。
简单图
在图中,若不存在顶点到自身的边,且同一边不重复出现,称这样的图为简单图。

带权的图称为网
子图
子图的顶点和边分别是父图的子集。

图的顶点和与边的关系

邻接点
对于无向图G = (V,{E}),如果边(v,v')属于 E ,那么v,v' 互为邻接点。
顶点的度
顶点的度是和V相关联的边的数目。记为TD(v)。

邻接到,邻接自
对于有向图G = (V,{E}),如果弧(v,v')属于E,那么称顶点v邻接到顶点v'.顶点v'邻接自顶点V
以顶点V为头的弧度称为V的入度
以顶点v为尾的弧的数目称为v的出度。
顶点V的度为 入度+出度
路径的长度是路径上的边或弧的数目
回路和环
第一个顶点到最后一个顶点相同的路径称为回路或环。
序列中顶点不重复出现的路径称为简单路径。
除第一个顶点和最后一个顶点外,其余顶点不重复出现的回路,称为简单回路或简单环。

连通图相关术语

连通图
无向图中,如果从顶点v到v'有路径。则称v和v'是联通的。如果图中任意两个顶点都是连通的,则称G是连通图。
连通分量
无向图中的极大连通子图称为连通分量。
强调:
1 要是子图
2,子图要是连通的
3,连通子图含有极大顶点数。
4,具有极大顶点数的连通子图包含依附于这些顶点的所有边。
强连通子图
在有向图G中,如果每一对顶点,从Vi到Vj,从Vj到Vi都存在路径,则称G是强连通股。有向图中的极大强连通子图称做有向图的强连通分量。
生成树
所谓的一个连通图的生成树是一个极小的连通图,但只有足以构成一颗树的n-1条边。
如果一个有向图恰有一个顶点的入度为0,其余顶点的入度均为1,则是一颗棵有向树。

图的存储结构

五种不同的存储结构
1,邻接矩阵
图的邻接矩阵存储方式是两个数组来表示图,一个一维数组存放顶点信息,一个二维数组(称为邻接矩阵)存储图中的边或弧的信息。
某个顶点的度,其实就是这个顶点Vi在邻接矩阵中第i行(或第i列)的元素之和。
有向图样例中,矩阵并不对称。
V1的入度为V1各列之和。
V1的出度为V1各行之和。
从代码中,n个顶点和e条边的无向网图创建的,时间复杂度为O(n+n^2 + e),其中对邻接矩阵的初始化耗时0(n^2)
2,邻接表
将数组与链表相结合的存储方式称为邻接表。

  • 图中顶点用一个一维数组存储(数组更容易读取顶点信息),每个数据元素还需要存储一个指向第一个邻接点的指针。
  • 图中每个顶点的所有邻接点构成一个线性表,由于邻接点的个数不确定,所以用单链表存储,无向图称为顶点的Vi的边表。有向图称为顶点Vi的弧尾的出边表。
    顶点表的各个结点有数据域和指针域构成,数据域存储数据本身,指针域指向边表的第一个结点。
    边表中的结点由邻接点指针域和next指针域构成,邻接点指针域指向邻接点在顶点表中的下标。next存储指向边表中下一个结点的指针。
    若是有向图
    边链表需要建立2个,一个以顶点为入度。一个以顶点为出度。
    对于带权值的网图,可以在边结点链表中加一个weight的数据域,存放权值信息即可。
    3 十字链表
    把有向图中的邻接表和逆邻接表结合起来。
    顶点表结点结构
数据域 入边表头指针 出边表头指针
data firstin firstout

边表结点结构

弧起点在顶点中的下标 弧终点在顶点中的下标 入边表指针域,指向终点相同的下一条边 出边表指针域,指向起点相同的下一条边 权值
tailvex headvex headline taillink weight

4,邻接多重表

某条边依附的一个顶点 依附于顶点ivex的下一条边 这条边依附的另一个顶点 依附于顶点jvex的下一条边
ivex ilink jvex jlink

5,边集数组
边集数组由2个一维数组构成。一个存储顶点的信息。
另一个存储边的信息,这个边数组的每个数据元素由一条起点下标,终点下标和权组成。边集数组关注的是边的集合。
它更适合对边进行的操作,而不适合对顶点进行的操作。
边数组结构

起点下标 终点下标 权重
begin end weight

图的遍历

图的遍历需要设置一个访问数组,访问过的顶点初值设为0,访问过设为1.这样避免重复访问
深度优先遍历(DFS)
适合目标比较明确,以找到目标为主要的目的情况。
广度优先遍历(BFS)
适合在不断扩大范围时找到最优解的情况
两者时间复杂度是一样的,不同之处仅仅在于对顶点的访问的顺序不同。

你可能感兴趣的:(第7张图的概念)