数据结构与算法 图

2 篇文章 0 订阅
2 篇文章 0 订阅

图的定义和术语:
  • 图G由顶点集V关系集E组成,记为: G=(V,E)
    – V是顶点(元素)的有穷非空集, E是两个顶点之间的关系的集合。
  • 若图G任意两顶点a,b之间的关系为有序对<a,b>,<a,b>∈E,
    则称<a,b>为从a到b的一条/有向边
    –其中: a是<a,b>的弧尾, b是<a,b>的弧头; 称该图G是有向图
    G1={V1,E1},
    V1={A,B,C,D,E}, E1={<A,C>,<A,D>,<C,D>,<B,E>,<E,B>}
  • 若图G的任意两顶点a,b之间的关系为无序对(a,b), 则称(a,b)为无向边(边),称该图G是无向图无向图可简称为图
    G2={V2,E2},
    V2={1,2,3,4,5,6}, E2={(1,3),(1,5),(3,5),(4,6)}
    在这里插入图片描述

一些特殊的图

1.完全图----有n个顶点和n(n-1)/2条边的无向图
在这里插入图片描述
2.有向完全图----有n个顶点和n(n-1)条弧的有向图
在这里插入图片描述
3.网(Network)----边(弧)上加权(weight)的图。
在这里插入图片描述

  • 对图 G=(V,E)和G’=(V’,E’),
    若V’属于V 且 E’属于E,则称G’是G的一个子图
    在这里插入图片描述
  • 与顶点x相关联的边(x,y)的数目,称为x的
    记作TD(x) 或D(x),在这里插入图片描述
  • 以顶点x为弧尾的弧<x,y>的数目,
    称为x的出度,记作OD(x)
  • 以顶点x为弧头的弧<y,x>的数目,
    称为x的入度,记作ID(x)ID(x)
  • 若从顶点vi到vj有路径,则称vi和vj连通的
  • 若图G中任意两顶点是连通的,则称G是连通图在这里插入图片描述
  • 若图G’是G的一个极大连通子图则称G’是G的一个连通分量。(连通图的连通分量是自身)
    在这里插入图片描述
    对有向图G
    ● 若在图G中,每对顶点vi和vj之间, 从vi到vj,且从 vj到vi存在路径,则称G是强连通图。
    ● 若图G’是G的一个极大强连通子图,则称G’是G的一个强连通分量。(强连通图的强连通分量是自身)
    例如:下图G12是强连通图,但非极大故非强连通分量。
    在这里插入图片描述
  • 设G=(V,E),G’=(V’,E’),V=V’,若G是连通图,
    G’是G的一个极小连通子图,(非极大即可) 则G’是G的一棵生成树。
    在这里插入图片描述
  • 若有向图G有且仅有一个顶点的入度为0其余顶点的入度
    为1
    ,则G是一棵有向树
    在这里插入图片描述
  • 有向图的生成树/生成森林。(结合树那章的概念)
    在这里插入图片描述
图的存储结构

1.数组表示法/邻接矩阵

  1. 顶点数组—用一维数组存储顶点(元素)
  2. 邻接矩阵—用二维数组存储顶点(元素)之间的关系(边或弧)

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
2.邻接表、逆邻接表 : 链式存储结构。
(1) 无向图的邻接表 :
为图G的每个顶点建立一个单链表,第i个单链表中的结点表示依附于顶点vi的边。
在这里插入图片描述

  • 若无向图G有n个顶点和e条边,需n个表头结点和2e个表结点。
    无向图G的邻接表,顶点vi的度为第i个单链表的长度。

(2)有向图的邻接表 :
第i个单链表中的表结点,表示以顶点vi为尾的弧(vi,vj)的弧头。
在这里插入图片描述

  • 若有向图G有n个顶点和e条弧,则需n个表头结点和e个表结点。
    有向图G的邻接表,顶点vi的出度为第i个单链表的长度。
    求顶点vi的入度需遍历全部单链表,统计结点值为i的结点数。(麻烦)

(3)有向图的逆邻接表:
第i个单链表中的表结点,表示以顶点vi为头的弧(vi,vj)的弧尾。
在这里插入图片描述

  • 若有向图G有n个顶点e条弧,则需n个表头结点和e个表结点。
    有向图G的逆邻接表,顶点vi的入度为第i个单链表的长度。
    求顶点vi的出度需遍历全部单链表,统计结点值为i的结点数。(改进)

(4)有向网的邻接表
在这里插入图片描述
3.有向图的十字链表。–将邻接表和逆邻接表合并而成的链接表。
在这里插入图片描述

  • 以邻接表为基础,扩展结点属性成起止结点序号
    再添加逆邻接表信息
    在这里插入图片描述

4.邻接多重表

  • (无向图的)的另一种链式存储结构
  • (1)图的一个顶点用一个“头结点”表示, 其中:
    data域 :存储和该顶点相关的信息,
    firstedge域 :存储第一条依附于该顶点的边。

在这里插入图片描述

  • (2)图的一条边用一个“结点”表示,
    其中:
    mark----标志域,可用以标记该条边是否被搜索过;
    vi和vj----该条边依附的两个顶点在图中的位置;
    vilink----指向下一条依附于顶点vi的边;
    vjlink----指向下一条依附于顶点vj的边。
    避免了无向图邻接表的一条边用两个结点。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
图的遍历

从图G的某定点vi出发,访问G的每个顶点一次且一次的过程。

1.图的深度优先搜索----DFS—Depth First Search
在这里插入图片描述
2.图的广(宽)度优先搜索----BFS—Breadth First Search
在这里插入图片描述
3.生成树

  • DFS的生成树
    在这里插入图片描述
  • BFS的生成树
  • 假定从A出发BFS遍历图G:
    在这里插入图片描述
    4.生成森林
  • DFS的生成森林
    在这里插入图片描述
  • BFS的生成森林
    在这里插入图片描述
    5.网的最小生成树-----在网G的各生成树中,其中各边的权之和最小的生成树称为G的最小生成树。
    在这里插入图片描述
  • MST性质:设G=(V,E)是一个连通图,通过某种算法构造其最小生成树,T=(U,TE)是正在构造的最小生成树。如果边(u,v)是G中所有一端在U中(即u∈U)而另一端在V-U中(即v∈V-U)具有最小值的一条边,则必存在一棵包含边(u,v)的最小生成树。

1.普里姆(prim)算法 以选顶点为主

  • 对n个顶点的连通网,初始时, T=(U,TE),U为一个开始顶点,TE=φ,以后根据MST性质,每次增加一个顶点和一条边,重复n-1次。U不断增大,V-U不断减小直到为空。
    例:从A出发
    在这里插入图片描述
  • 另一棵最小生成树:从D出发
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值