C语言数据结构与算法---图的基础

1.基本定义

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

图中数据元素称为顶点(Vettex),任意两个顶点间都可能有关系,定点之间的逻辑关系用边表示,边集可以为空。

2. 各种图的定义

无向边:若顶点 Vi 到 Vj 之间的边没有方向,则称这条边为无向边(Edge),用无序偶(Vi,Vj)来表示

    无向图:任意两个顶点之间的边都是无向边的图。----(A,B)与 (B,A)是一样的 有向边:若从顶点 Vi 到 Vj 的边有方向,则称这条边为有向边,也成为弧(Arc),用有序偶<Vi,Vj>来表示,Vi称为弧尾,Vj称为弧头。 弧尾指向弧头 上图G是一个有向图,G={V,E},其中 V={A,B,C,D}, E={<B,A>,<B,C>,<C,A>,<A,D>}
无向边用小括号 ‘()’ 表示,有向边用尖括号 ‘<>’ 表示
    简单图:在图结构中,若不存在顶点到其自身的边,且同一条边不重复出现,则称这样的图为简单图。 无向完全图:在无向图中,如果任意两个顶点之间都存在边,则称该图为无向完全图。含有n个顶点的无向完全图有n*(n-1)/2条边 有向完全图:在有向图中,如果任意两个顶点之间都存在方向互为相反的两条弧,则称该图为有向完全图。含有n个顶点的有向完全图有**n*(n-1)**条边。 稀疏图:通常认为边或弧数小于n*logn(n是顶点的个数)的图 稠密图:通常认为边或弧数大于或等于n*logn(n是顶点的个数)的图 权:有图的边或弧相关的数 网:带权的图。

3. 图的顶点与边的关系

    对于无向图G = (V,E),如果边(V1,V2)∈E,则称顶点V1和V2互为邻接点(Adjacent),即V1和V2相邻接。边(V1,V2)依附(incident)于顶点V1和V2,或者说边(V1,V2)与顶点V1和V2相关联。 顶点V的度是和V相关联的边的数目,记为TD(V). 顶点A的度为3 对于有向图G=(V,E),如果有<V1,V2>∈E,则称顶点V1邻接到顶点V2,顶点V2邻接自顶点V1。 以顶点V为头的弧的数目称为V的入度(InDegree),记为ID(V),以V为尾的弧的数目称为V的出度(OutDegree),记为OD(V),因此顶点V的度为TD(V)=ID(V)+OD(V)。 点A的入度是2,出度是1,所以顶点A的度是3

4. 连通图

    连通:在无向图中,如果一个顶点到另一个顶点有路径,则称这两个顶点是连通的。 连通图:任意两个顶点都是连通的图。 连通分量:无向图中的极大连通子图称为连通分量
注意:连通分量: 首先要是子图,并且子图是要连通的; 连通子图含有极大顶点数; 具有极大顶点数的连通子图包含依附于这些顶点的所有边。
    强连通图:在有向图中,对于每一对Vi到Vj都存在路径 强连通分量:有向图中的极大强连通子图。 图1并不是强连通图,以为不存在从D到A的路径,图2是强连通图,而且图2是图1的极大强联通子图

5. 连通图的生成树

一个连通图的生成树是一个极小的连通子图,它含有图中全部的n个顶点,但只有足以构成一棵树的 n-1 条边。 图1是普通图,不是生成树;图2和图3满足 n 个顶点 n-1 条边,是一颗生成树;有 n-1 条边不一定是生成树,如图4

    有向树:一个有向图恰有一个顶点入度为0,其余顶点的入度均为1 入度为0:相当于树的根结点。 其余顶点的入度均为1:树的非根结点的双亲只有一个 图1是一个有向图,去掉一些弧后,可以分解为两颗有向树,如图2,图3,这两颗就是图1有向图的生成森林。
经验分享 程序员 微信小程序 职场和发展