zoukankan      html  css  js  c++  java
  • c语言数据结构学习心得——图

    图G由顶点集V和边集E组成,记为G=(V,E)

    图不可为空,一定有顶点集不为空

    有向图:有向边(弧)的有限集合

    无向图:无向边的有限集合

    连通:顶点V到顶点V'有路径

    连通分量:无向图中的极大连通子图(极大:1.顶点足够多;2.极大连通子图包含依附这些点的所有边)

    强连通分量:有向图中的极大强连通子图

    连通的生成树:包含图中的全部n个顶点,但只有n-1条边的极小连通子图

    度:以该顶点为一个端点的边数目

    入度(ID):以顶点为终点的有向边数目

    出度(OD):以顶点为起点的有向边数目

     

    图的存储结构

    邻接矩阵(顺序存储)

    顶点:用一维数组存储 边/弧:用二维数组存储

    #define MaxVertexNum 100                    //顶点数目最大值
    typedef char VertexType;                    //顶点的数据类型项,不同情况不一样
    typedef int EdgeType;                       //整数表示权值或者连通性
    typedef struct{
       VertexType Vex[MaxVertexNum]; //顶点表
       EdgeType [MaxVertexNum][MaxVertexNum];   //邻接矩阵
       int vexnum,arcnum;                       //图的当前顶点数和弧数
    }MGraph

    邻接表:存储的无向图中查找顶点容易,但是修改边或者查询边需要遍历链表。

    图的遍历

    从图中某一顶点出发,访遍图中其余顶点,且使每一个顶点仅被访问一次。

    BFS(广度优先遍历):类似于树的层序遍历算法

    时间复杂度:

    邻接表:每个顶点入队一次,O(|V|),对于每个顶点,搜索其邻接点,所以访问该顶点所有边,O(|E|),所以总时间复杂度O(|V|+|E|)。

    邻接矩阵:每个顶点入队一次,O(|V|),对于每个顶点,搜索其邻接点,所以遍历矩阵,O(|V|),所以总时间复杂度O(|V|2|)。

    DFS(深度优先遍历):类似于树的先序遍历算法。

    邻接表:每个顶点入队一次,O(|V|),对于每个顶点,搜索其邻接点,所以访问该顶点所有边,O(|E|),所以总时间复杂度O(|V|+|E|)。

    邻接矩阵:每个顶点入队一次,O(|V|),对于每个顶点,搜索其邻接点,所以遍历矩阵,O(|V|),所以总时间复杂度O(|V|2|)。

    总结

  • 相关阅读:
    wget时http无效问题
    mysql8.0.15的最简单安装
    创建时间时jdbcType使用的准确性
    fastJson的几种转换模式
    (mybatis)EnumTypeHandler和EnumOrdinalTypeHandler的区别
    在文件上传时fileName.endsWith()的获取后悔
    day22
    day21
    day20
    day19
  • 原文地址:https://www.cnblogs.com/suprechen/p/10611623.html
Copyright © 2011-2022 走看看