首页 > 其他 > 详细

图的基础:存图

时间:2020-08-08 23:49:43      阅读:125      评论:0      收藏:0      [点我收藏+]

存储图的信息基本有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

 

图的基础:存图

原文:https://www.cnblogs.com/sunjianzhao/p/13461011.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!