美文网首页
数组模拟邻接表

数组模拟邻接表

作者: _NewMoon | 来源:发表于2019-09-28 22:16 被阅读0次

在Dijkstra算法中,当图为稠密图时,可以用邻接矩阵来存图,好写但是效率低,当图为稀疏图时,
可以用邻接表来存图,效率高。

以下记录自己对邻接表的理解:

邻接表存图,又叫链式存储法,利用数组和链表来实现存储,我们可以直接用数组来模拟单链表

邻接表的结构体(一般方法):

struct Edge{
    int to;   //终点
    int w;    //边的权重
    int next; //起点
}edge[N];
head[顶点的个数]

edge为图的边集,我们把图中的每一条边进行编号,to指向这条边的终点,w存放边的长度,
edge[x].next表示边x的下一条边的编号,head[x]表示以x为起点的最后一条边

构建图的函数:

//idx表示为边的编号,从0开始
int idx = 0;  
//a为某条边的起点,b为该条边的长度,c为该条边的长度
void add(int a,int b,int c)
{
    edge[idx].to = b;
    edge[idx].w = c;
    edge[idx].next = head[a];
    head[a] = idx++;
}

如此,我们就可以构建一个图,下面为数组模拟的邻接表的加边函数:

void add(int a,int b,int c)
{
    //e[x]存放边x的终点
    e[idx] = b,w[idx] = c,ne[idx] = head[a],head[a] = idx++;
}

相关文章

  • 数组模拟邻接表

    在Dijkstra算法中,当图为稠密图时,可以用邻接矩阵来存图,好写但是效率低,当图为稀疏图时,可以用邻接表来存图...

  • 最短路专题整理

    模板 Dijkstra 模板一(map数组模拟邻接表) 处理小图速度相对较快。内存占用较小,对重边优化较差。 模板...

  • 最短路模板整理

    Dijkstra 模板一(map数组模拟邻接表) 处理小图速度相对较快。内存占用较小,对重边优化较差。 模板二(链...

  • 菜鸟算法-图的邻接表表示法

    图的邻接表 上图中有4个顶点5条边: 邻接表 这里用数组来实现邻接表: U V W : U[i]->V[i] 权值...

  • 面试准备之【数据结构】1——图

    一. 有向图/无向图 共有:邻接表,邻接矩阵 有向图独有:十字链表,边集数组 无向图独有:邻接多重表 1.邻接矩...

  • 图的存储: 邻接矩阵 邻接链表 链式前向星 = 边集数组+邻接表 链式前向星代码,维护一个head头数组,以及一个...

  • 数据结构-学习二

    图: 无向图,有向图度,子图,路径,环,连通图,连通子图。 存储: 邻接矩阵二维数组。 邻接表+数组加链表优先搜...

  • 图论算法

    1. 图的表示:邻接矩阵和邻接表 邻接矩阵:大小为|V|的二维数组,对于每条边(u, v),置A[u][v]=1或...

  • Dijkstra算法的java实现(邻接表存储有向带权图)

    1.图的两种表示方式:a. 邻接矩阵 二维数组搞定b. 邻接表:Map>搞定...

  • Java数据结构 - 图(邻接表存储)

    邻接表 相比邻接矩阵,邻接表要更加节省空间。 邻接表存储 本文将介绍邻接表存储有向带权图。图的例子如下。 介绍一下...

网友评论

      本文标题:数组模拟邻接表

      本文链接:https://www.haomeiwen.com/subject/dqfxpctx.html