zoukankan      html  css  js  c++  java
  • 图的其中两种表示方式

    1.无向图可以用邻接矩阵G [n] [n] —— n个顶点从0到n-1编号,若<Vi, Vj>是G中的边,则G [i] [j] = 1,否则G [i] [j] = 0;矩阵的特点:对角线都为0,以对角线为对称轴,两边对称。

    对于无向图的存储,可以用一个长度为n(n+1)/2的1维数组a存储,可以节省一半的空间(a[0] = G00, a[1] = G10, a[2] = G11……),则Gij在a中对应的下标是:a[i * (i+1) / 2 + j]

    对于网络,只要把G [i] [j]的值定义为边<Vi, Vj>的权重即可

    邻接矩阵的好处:

    1.直观、简单、好理解;

    2.方便检查任意一对顶点间是否存在边;

    3.方便找任一顶点的所有“邻接点”(有边直接相连的顶点)

    4.方便计算任一顶点的“度”(从该点发出的边数为“出度”,指向该点的边数为“入度”)

      无向图:对应行或列非0元素的个数

      有向图:对应行非0元素的个数是“出度”;对应列非0元素的个数是“入度”

    邻接矩阵的缺点:对于稀疏图来说有大量的无效元素,浪费空间。统计稀疏图中一共有多少条边,浪费时间

    2.以此,引出另一个表示方式——邻接表:G [n]为指针数组,对应矩阵每行一个链表,只存非0元素。(其表示顺序不是唯一的)

    对于网络,结构中要增加权重的域,用邻接表来存储 稀疏图 才值得

    邻接表的特点:

    1.方便找任一顶点的所有“邻接点”

    2.节约稀疏图的空间,需要n个头指针,2e个结点(每个结点至少2个域)

    3.对无向图来说,方便计算任一顶点的度;对有向图来说,只能计算“出度”;需要构造“逆邻接表”(存指向自己的边)来方便计算“入度”

    4.不方便检查任意一对顶点间是否存在边

    图的表示方式有很多,一般根据需要解决的问题来决定表示方式。

  • 相关阅读:
    4.8 C++ typeid操作符
    4.7 C++ dynamic_cast操作符
    tomcat中class和jar的加载顺序(转)
    java Files类和Paths类的用法 (转)
    搭建DUBBO项目解决DUBBO.XML标签报错的问题(转载)
    Maven异常:Could not find artifact
    在docker宿主机上查找指定容器内运行的所有进程的PID
    jmap、jstack、jps无法连接jvm解决办法
    linux中如何查看某一进程的启动时间
    Eureka与ZooKeeper 的比较(转)
  • 原文地址:https://www.cnblogs.com/zhengxin909/p/12776349.html
Copyright © 2011-2022 走看看