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

链式前向星

时间:2024-07-23 14:11:33浏览次数:10  
标签:nxt head int tot edge 链式 前向星

由链式前向星版本的dfs引入链式前向星:

void dfs(int u,int pre){
    for(int i=head[u];i;i=edge[i].nxt){
        int v=edge[i].to;
        if(v==pre) continue;
        dfs(v,u);
    }
    cout<<u<<" ";
}

for函数结构

  1. init: i=head[u]
  2. condition: i (i!=0)
  3. increment: i=edge[i].nxt

结合循环中v=edge[i].to 可知:

  • head[u]存储的是这个节点第一条边的编号
  • i遍历边的编号
  • edge[i].nxt存储下一条边的编号

这就构成了一个以边为节点的链表,head[u]edge[i].nxt分别是链表头与指向链表下一个元素的指针。

容易得出加边函数的定义与边结构体的定义:

const int maxm=1e5+5;
struct Edge{
    int nxt,to,w;
}edge[maxm];
int head[maxm],tot=0;
void add_edge(int u,int v,int w){
    edge[++tot].nxt=head[u];
    edge[tot].to=v;
    edge[tot].w=w;
    head[u]=tot;
}

空间复杂度O(m),edge[++tot]可以像常规邻接表实现那样使用vector<Edge> edge;只不过常数略大。
特殊用途:存无向图时一条边拆分成两条互为反边的有向边,这两条边在edge数组里相邻。i^1即为反边的编号。

标签:nxt,head,int,tot,edge,链式,前向星
From: https://www.cnblogs.com/fotrox-llllljm/p/18318247

相关文章

  • 使用plotly dash的部分链式回调
    我正在尝试使用绘图仪表板中的多个下拉栏来过滤数据。总共有5个下拉选项。我希望前3个独立运行,而后两个应该以双向方式链接到前3个。具体来说,我要实现的功能是:所有值的默认值应该始终是初始起点前3个选项(年、季节和月)应独立运行。例如,可以......
  • 数据结构:线性表的链式表示
    继上文《数据结构:线性表的顺序表示》,我们知道线性表的主要操作如下:InitList(&L):初始化表length(L):求表长LocateElem(L,e):按值查找操作GetElem(L,i):按位查找操作ListInsert(&L,i,e):插入操作ListDelete(&L,i,&e):删除操作PrintList(L):输出操作Empty(L):判空操......
  • 【数据结构与算法】详解二叉树下:实践篇————通过链式结构深入理解并实现二叉树
          ......
  • 8-队列的链式存储结构的操作
    顺序队列的操作#include<stdio.h>#include<stdlib.h>#include<stdbool.h>typedefintElemType;/*链式队列的节点*/typedefstructLinkNode{/*数据域*/ElemTypedata;/*指针域,指向下一个节点*/structLinkNode*next;}LinkNode;/*链式队列*/......
  • 6-栈的链式存储类型
    #include<stdio.h>#include<stdlib.h>#include<stdbool.h>typedefintElemType;/*栈的链式存储类型*/typedefstructStackNode{/*数据域*/ElemTypedata;/*指针域*/structStackNode*next;}StackNode,*LinkStack;/*栈类型定义*//**......
  • 数据结构:二叉树的链式结构及代码实现
    一.二叉树的链式结构1.1前置说明在学习二叉树的基本操作前,需先要创建一棵二叉树,然后才能学习其相关的基本操作。由于现在大家对二叉树结构掌握还不够深入,为了降低大家学习成本,此处手动快速创建一棵简单的二叉树,快速进入二叉树操作学习,等二叉树结构了解的差不多时,我们反过头......
  • 二叉树的链式结构
    前言Hello,友友们,小编将继续重新开始数据结构的学习,前面讲解了堆的部分知识,今天将讲解二叉树的链式结构的部分内容。1.概念回顾与新增二叉树是一种数据结构,其中每个节点最多有两个子节点,分别是左子节点和右子节点。二叉树的链式结构表示是使用指针(或引用)来连接节点,形成......
  • 链式前向星和拓扑排序专题
    多日以来被图论狠狠的羞辱,下定决心学习图论基础链式前向星和拓扑排序图的存储方式邻接表规模大的稀疏图可用邻接表,存储复杂度为\(O(n+m)\)。n表示点的数量,m表示边的数量。structedge{ intfrom,to,w; edge(inta,intb,intc){ from=a;to=b;w=c; }}v......
  • 线性表的链式表示——链表
    目录一、单链表1、单链表的定义2、单链表的基本操作 (1)单链表的初始化(2)插入操作(3)删除操作(4)查找操作(5)求表长操作(6)单链表的建立 二、双链表三、循环链表 1、循环单链表2、循环双链表四、静态链表 五、顺序表和链表的比较1、存取方式2、逻辑结构与物理结构3......
  • 【数据结构】链式二叉树详解
    个人主页~链式二叉树基本内容~链式二叉树详解1、通过前序遍历的数组来构建二叉树2、二叉树的销毁3、二叉树节点个数4、二叉树叶子节点个数5、二叉树第k层节点个数6、二叉树查找7、前序遍历8、中序遍历9、后序遍历10、层序遍历与检查二叉树是否为完全二叉树Queue.hQue......