• 第六章学习小结


    一、图结点之间的关系可以是任意的,图中任意两个元素之间都可能相关。

    二、基本定义:

      有向图的顶点对是<x,y>;无向图的顶点对是(x,y)

    三、基本术语:

      ①无向完全图具有n(n-1)/2条边;有向完全图具有n(n-1)条弧。

      ②带权的图称为网。

      ③连通分量是指无向图中的极大连通子图

      连通图的生成树是指一个极小连通图,它含有图中全部顶点,但只有足以构成一棵树的n-1条边。

    四、图的存储结构之邻接矩阵表示法:  

     1 #define MaxInt 32767
     2 #define MVNum 100
     3 typedef char VerTexType;//顶点的类型 
     4 typedef int ArcType;//边的类型 
     5 typedef struct
     6 {
     7     VerTexType vexs[MVNum];//顶点表 
     8     ArcType arcs[MVNum][MVNum];//邻接矩阵(必初始化为最大值MaxInt)
     9     int vexnum, arcnum;//当前图的点的数量和边的数量 
    10  } AMGGraph; 
    图的邻接矩阵的储存表示

    优点:便于计算各个顶点之间是否有边、是否有度。

    缺点:①不便于增加和删除顶点②不便于统计边的数目,需要扫描邻接矩阵所有的元素才能统计完毕,时间复杂度为O(n2)。③空间复杂度高

    五、图的存储结构之邻接表表示法:

      邻接表是链式存储结构,在邻接表中,对图中每个顶点vi建立一个单链表并把与vi相邻接的顶点放在这个链表中。其中所有的表头结点以顺序结构的形式存储,一边可以随机访问任一顶点的边链表。表头结点包括数据域(data)和链域(firstarc)两个部分。边表中的边结点包括邻接点域(adjvex用来指示与顶点vi临接的点在图中的位置)、数据域(info存储和边相关的信息,如权值等)和链域(nextarc指示与顶点vi邻接的下一条边的结点)三个部分。

      有时,为了确定顶点的入度,可以建立一个有向图的逆邻接表。

     1 #define MVNum 100
     2 typedef int OtherInfo
     3 typedef struct  ArcNode //边结点 
     4 {
     5     int adjvex;//该边所指向的顶点的位置 
     6     OtherInfo info; //和边相关的信息 
     7     struct ArcNode *nextarc;//指向下一条边的指针
     8 } ArcNode;
     9 typedef struct VNode  //顶点信息 
    10 {
    11     VerTexType data;// 
    12     ArcNode *firstarc; //指向第一条依附该顶点的边的指针
    13  } VNode, AdjList[MVNum];//Adjlist表示邻接表类型 
    14 typedef struct
    15 {
    16     AdjList vertices;
    17     int vexnum, arcnum;//图的当前顶点数和边的数量 
    18  } ALGraph;
    图的邻接表的存储表示的方法

    优点:

    ①便于删除和增加点的数目

    ②便于统计边的数目,时间复杂度:O(n+e)

    ③空间效率高

    缺点:

    ①不便于判断顶点之间是否有边,时间复杂度O(n+e)

    ②不便于计算各个顶点的度(不像无向图,还要计算出度、入度)。

    六、图的遍历之DFS(深度优先算法):

      从某个顶点v出发,访问v。找出刚访问过的顶点的第一个未被访问的邻接点,访问该结点,以该结点为新顶点。重复此步骤,直至刚访问过的顶点没有未被访问过的邻接点为止。返回前一个仍有未被访问过的邻接点的顶点,找出该顶点的下一个未被访问的邻接点,访问该结点。

    七、图的遍历之BFS(广度优先算法):

      先从图中某个顶点v出发,访问v。依次访问v的各个未曾访问过的邻接点。分别从这些邻接点出发依次访问它们的邻接点,并使“先被访问的顶点的邻接点”限于“后被访问的顶点的邻接点”被访问。重复此步骤。直至所有已被访问的顶点的邻接点都被访问到。(类似树的层次遍历)

    八、图的应用之最小生成树(最小生成树其实是最小权重生成树的简称):

    1.普利姆算法

    2.克鲁斯卡尔算法

    九、图的应用之最短路径:

    1.迪杰斯特拉算法

  • 相关阅读:
    如何基于Azure平台实现MySQL HA(方法论篇)
    如何对Azure磁盘性能进行测试
    Azure底层架构的初步分析
    聊聊Azure的安全性
    关于Azure带宽的测试
    JavaScript 优化
    SQL时间段查询
    win7+64位+Oracle+11g+64位下使用PLSQL+Developer+的解决办法
    putty 使用方法,中文教程
    怎样才能专心工作
  • 原文地址:https://www.cnblogs.com/Winston-wmj/p/10890777.html
Copyright © 2020-2023  润新知