• 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|)。

    总结

  • 相关阅读:
    致那些不甘寂寞的人
    实现一个前端路由,如何实现浏览器的前进与后退 ?
    github 授权登录教程与如何设计第三方授权登录的用户表
    十分钟弄懂:数据结构与算法之美
    前端架构师亲述:前端工程师成长之路的 N 问 及 回答
    JavaScript 数据结构与算法之美
    JavaScript 数据结构与算法之美
    JavaScript 数据结构与算法之美
    HTTPS中间人攻击实践(原理·实践)
    借助FreeHttp任意篡改http报文 (使用·实现)
  • 原文地址:https://www.cnblogs.com/suprechen/p/10611623.html
Copyright © 2020-2023  润新知