数组模拟邻接表

2019-09-28  本文已影响0人  _NewMoon

在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++;
}
上一篇 下一篇

猜你喜欢

热点阅读