• 图的基础:存图


    存储图的信息基本有3种方法

    1:邻接矩阵

    使用一个n*n的二维数组,a[i][j]表示结点i到结点j之间存在一条边。临街矩阵既可以存储有向图,也可存储无向图,既可以只是单纯的表示两个结点之间是否连通,也可以表示含有权值的图。无向图存储的只是需要记住a[i][j]=a[j][i]就可以了

    优点:便于理解,便于书写代码

    缺点:空间、时间复杂度比较高,一般适用于稠密图

    2:邻接表

    为图的每一个结点建立一个链表,链表中的值表示与这个结点相连的节点的信息。

    优点:便于理解,时间空间复杂度较低

    缺点:写一个单纯的链表,设计指针,容易写错

    所以邻接表的思想一般使用vector可变数组来实现

    3:链式前向星

    其实也是一个邻接表的表示方法,不过时间和控件复杂度会稍微好点

    int head[N],cnt=0;
    struct edge{
        int from,to,next,dis;
    }edge[N];
    void addedge(int u,int v,int w){
        cnt++;
        edge[cnt].from=u;//表明这条边的来向
        edge[cnt].to=v;//表明这条边的去向
        edge[cnt].next=head[u];//表明这条边的下一条边(都是与u相连的边)
        head[u]=cnt;//改变u结点的第一个边
        //相当于原先是head[u]->v1,现在插入一条(u,v2)的边,变为head[u]->v2->v1 
    }

    写于2020/8/8 23:23


    作者:孙建钊
    出处:http://www.cnblogs.com/sunjianzhao/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    Java虚拟机JVM学习05 类加载器的父委托机制
    java 接口
    java 抽象类
    代码块(2)
    获取超额收益的思考
    HttpServer
    交易过程思考
    A股时间窗口
    redash学习记录
    MySQL学习记录
  • 原文地址:https://www.cnblogs.com/sunjianzhao/p/13461011.html
Copyright © 2020-2023  润新知