首页 > 其他分享 >链式前向星

链式前向星

时间:2023-02-07 17:00:16浏览次数:32  
标签:head int next edge 链式 前向星


链式前向星

图的存储一般有两种:邻接矩阵、前向星。

邻接矩阵很方便,但是缺点也明显:

1.若图是稀疏图,边很少,开二维数组a[][]浪费;

2.若点很多(如10000个点)a[10000][10000]又会爆.只能用前向星做.


前向星的效率不是很高,优化后为链式前向星,直接介绍链式前向星。


(一)链式前向星

 

1. 结构

这里用两个东西:

1 结构体数组edge存边,edge[i]表示第i条边,

2 head[i]存以i为起点的第一条边(在edge中的下标)

struct node{

int next; //下一条边的存储下标

int to; //这条边的终点

int w; //权值

}edge[500010];

2.增边

若以点i为起点的边新增了一条,在edge中的下标为j.

那么edge[j].next=head[i];然后head[i]=j.

即每次新加的边作为第一条边,最后倒序遍历


void Add(int u, int v, int w) //起点u, 终点v, 权值w
tot为边的计数,从0开始计
{
edge[tot].v=v;
edge[tot].w=w;
edge[tot].next=head[u];
head[u]=tot++;
}

 

 

3. 遍历

遍历以st为起点的边

memset(head,-1,sizeof(head));
for(int i=head[st]; i!=-1; i=edge[i].next)

举个例子:

链式前向星_链式前向星

i开始为第一条边,每次指向下一条(以-1为结束标志)  (若下标从1开始,next应初始化0)

存在边1,3   1,4   2,5   2,6   4,3   5,3  六条边

依次调用函数add_edge之后,可以得到

edge[0].to=3; edge[0].next=-1; head[1]=0;

edge[1].to=4; edge[1].next=0; head[1]=1;

edge[2].to=5; edge[2].next=-1; head[2]=2;

edge[3].to=6; edge[3].next=2; head[2]=3;

edge[4].to=3; edge[4].next=-1; head[4]=4;

edge[5].to=3; edge[5].next=-1; head[5]=5;

链式前向星_链式前向星_02

标签:head,int,next,edge,链式,前向星
From: https://blog.51cto.com/u_14932227/6042484

相关文章

  • EFore 分页查询 链式封装
    此文提供一个初步的封装思路,简化代码编写。1.先封装一个ResultSet存放查询结果:publicclassResultSet<T>{///<summary>///总记录数......
  • 链式前向星
    注意到邻接矩阵空间复杂度为\(n^2\),查找边复杂化为\(O(n)\),这在处理数据较大的时候是极其不利好的,我们需要考虑优化.注意到实际上邻接矩阵存在许多空间的浪费,因为......
  • php类自动装载、链式操作、魔术方法
    1、自动装载实例目录下有3个文件:index.phpload.phptests文件夹tests文件夹里有test1.php<?phpnamespaceTests;classTest1{staticfunctiontest(){......
  • 链式编程
    目录一、什么是链式编程二、链式编程的实现(指针)三、链式编程(引用)一、什么是链式编程链式编程在C++中使用的地方很多,比如说输出的时候可以使用很多的<<,这就使用了链式编程......
  • 链式法则和分部积分法
    链式法则(chainrule)用于求导,公式有两种写法:写法1:写法2:  示例:对y=(2x-5)3求导。把2x-5当成u(即u=2x-5),求F'(x)=f'(u)*u'(x)分别对f(u)和u(x)两个函数求导:(u3)'=3u2,(2......
  • 2023.1.10链式访问
    ......
  • 代码随想录day14 LeetCode 144.二叉树的前序遍历 145.二叉树的后序遍历 94.二叉树的中
    144.二叉树的前序遍历classSolution{public:vector<int>v;vector<int>preorderTraversal(TreeNode*root){if(root==NULL)returnv;......
  • C++实现链式表示多项式加法运算
    #include<iostream>#include<cstdlib>usingnamespacestd;#defineMAXSIZE100#defineOK1#defineERROR0typedefintElemtype;typedefintStatus;typedefstructPNo......
  • netcore添加skywalking链式追踪
    简介  在分布式系统当中,想要监控服务与服务之间调用耗时,或者是查问题的时候,不能像向单机那种形式去查询.查找了一段时间发现目前市场上用的是skywalking,由华为大佬......
  • 线性表之链式存储
    目录初始化一个空线性表空链式表的抽象表达查找按序号按值在位序i前插入一个新元素X删除指定位序i的元素返回线性表L的长度n吐槽初始化一个空线性表空链式表的抽象表达/......