简述链式前向星

article/2025/10/16 12:00:04

一、前言

我们常见的存图数据结构有两种,一种是邻接矩阵,另一种是邻接表。而在邻接矩阵中,空间复杂度为 O ( n 2 ) O(n^2) O(n2),在稀疏图的情况下,相较于邻接表浪费了许多空间。而常规的邻接表是用链表进行操作,不便于打竞赛,因此大佬们在邻接表的基础上发明了这个简单易操作的结构——链式前向星

二、邻接表

因为链式前向星是由邻接表(链表)变化来的,邻接表是存储图的边集,我们简单回忆一下邻接表(具体内容不做展开):

下面是图 G 1 , G 2 G_1,G_2 G1,G2
在这里插入图片描述
邻接表的结点结构为:
在这里插入图片描述
上图中adjvex为邻接点,即边的终点;nextarc连接同起点的下一个结点;info存边长等信息,firstarc连接该点对应的第一条边(因为是头插法,所以为最后插入的边)。

则由 G 1 , G 2 G_1,G_2 G1,G2 得到的邻接表为(info域在图中省略):

在这里插入图片描述
邻接表在每次插入结点时使用头插法

三、链式前向星

在简单回忆了邻接表后,我们开始介绍竞赛中图论经常使用的存图结构——链式前向星(正文来了)。

有了邻接表的思想,链式前向星则十分容易理解,宏观上我们只需要把链表改成数组就行了,具体介绍如下:

首先我们写出链式前向星的数据结构及加边的代码:

namespace G{//数据结构int to[MAXM], head[MAXN], nxt[MAXM], tot;void AddEdge(int u, int v, int w) {//u,v,w分别为边的起点、终点和边权to[tot] = v;//填adjvex域val[tot] = w;//填info域,这里为边权nxt[tot] = head[u];//连接下一个结点head[u] = tot++;//头指针移动}
}

代码中to对应邻接表中的adjvex域,w对应info域,nxt对应nextarc域,head对应头指针firstarc域,加边代码功能见注释。

最后,你就可以像用链表一样使用链式前向星了,希望大家在竞赛中取得好的成绩。


http://chatgpt.dhexx.cn/article/QhdBfrpr.shtml

相关文章

链式前向星 详解

链式前向星 链式前向星是一种类似于邻接表的存图方式,同样适用于有向 图和无向图。 他建立的是边与边之间的联系 它将边里的所有边都进行编号 int cnt; //边的编号 struct edge{ //边的结构体int from,to,w,next; //from是边的起点(这个可有可无&a…

用链式前向星存储图

图最常用的存储结构主要是邻接矩阵和邻接表。当顶点数太大时,用二维数组表示的邻接矩阵可能超内存(MLE),而用邻接表的编码工作量较大,此时,使用vector数组或链式前向星模拟邻接表是不错的选择。因vector数组…

链表、链式前向星

讲链表的时候就卡在这里了,最短路又卡在链式前向星上了,毕竟是图论基础,觉得还是有必要写一写防止下次再懵。 链表都是头插法!!即每次我们给他插一个头。 普通链表 先初始化令head-1,idx-1. void add_tohead(int x…

链式前向星(详细讲述)

在dalao的压迫下本蒟蒻发个博客,给大家讲一下链式前向星(新手,写错了轻喷) 首先说明一点链式前向星适合于稀疏图,而邻接矩阵则更适合稠密图,所以最好看好数据范围再决策使用哪个方法,当然有些题…

链式前向星与邻接表对比

本文图片及数据 对于这样一张有向图: 输入边的顺序如下: 1 2 2 3 3 4 1 3 4 1 1 5 4 5 对于邻接表来说是这样的: 1 -> 2 -> 3 -> 5 2 -> 3 3 -> 4 4 -> 1 -> 5 5 ->^ 对于链式前向星来说是这样的&…

链式前向星存图(有图详解)

链式前向星:既然是链式那么肯定和链表相关,前向星是每次指向都向前 链式前向星存图是以边为中心,并不是以结点为中心,它记录的是边的一些属性,包括边边的id、头节点、尾结点、权值、边的指向! 边的指向是遍历图的时候需要按照一定顺序去遍历,而不能胡乱的去遍历,那么就需要这些…

链式前向星的详解

目录 1:链式前向星的概念解释 2:代码展现 链式前向星是一种非常好用的有向图存储方式,但是它的代码难度却有点大。作者在这上面花了很长的时间才弄懂。虽然有其他的博客大佬写的很好,但总感觉不太适合小白选手(比如说…

链式前向星基本原理

一、概述 我们在学习图论的时候学习了一种图的存储结构--二维数组邻接矩阵储存,他虽然可以表达直观,快速访问连接两点的边,但是它占用空间大,只适用于点少的图,所以我们需要一种能够可以存储大型图的东西--链式前向星…

链式前向星的原理图解

笔者写下这篇文章的契机是,前两天在上机课用纯链式存储写题,累的够呛。于是痛定思痛,在此梳理一遍链式前向星,也希望能给有同样困扰的同学们提供一点帮助。 在进入正题之前,我们先用邻接矩阵和邻接表引入。 邻接矩阵表…

【链式前向星+存图】讲解

大佬的链式前向星:https://blog.csdn.net/acdreamers/article/details/16902023 【前向星】&#xff1a; 解释一下&#xff1a; 【前向星和链式前向星的不同】&#xff1a; 【给出链式前向星的代码实现】&#xff1a; #include<bits/stdc.h> using namespace std; #def…

链式前向星——最完美图解

图的存储方法很多,最常见的除了邻接矩阵、邻接表和边集数组外,还有链式前向星。链式前向星是一种静态链表存储,用边集数组和邻接表相结合,可以快速访问一个顶点的所有邻接点,在算法竞赛中广泛应用。 链式前向星存储包括两种结构: 边集数组:edge[ ],edge[i]表示第i条边…

链式前向星(详解)

链式前向星&#xff08;详解&#xff09; 转自&#xff1a;传送门 我们首先来看一下什么是前向星. 前向星是一种特殊的边集数组,我们把边集数组中的每一条边按照起点从小到大排序,如果起点相同就按照终点从小到大排序, 并记录下以某个点为起点的所有边在数组中的起始位置和…

链式前向星

一 点睛 链式前向星采用了一种静态链表存储方式&#xff0c;将边集数组和邻接表相结合&#xff0c;可以快速访问一个节点的所有邻接点。 链式前向星有如下两种存储结构。 1 边集数组 edge[],edge[i] 表示第 i 条边。 2 头节点数组 head[],head[i] 存储以 i 为起点的第1条边…

深度理解链式前向星

我们首先来看一下什么是前向星. 前向星是一种特殊的边集数组,我们把边集数组中的每一条边按照起点从小到大排序,如果起点相同就按照终点从小到大排序, 并记录下以某个点为起点的所有边在数组中的起始位置和存储长度,那么前向星就构造好了. 用len[i]来记录所有以i为起点的边在数…

链式前向星(超详细)

前向星和链式前向星 链式前向星 添加边的操作 链式前向星&#xff0c;就是以链式结构来储存前向星&#xff0c;每条边就要用结构体&#xff0c;结构体中包含三个数据&#xff1a; Edge[i].to &#xff1a;第i条边的终点 Edge[i].next &#xff1a;与第i条边同一个起点的下…

stm32串口中断的接收

利用串口使得led点亮 利用之前的串口函数加上NVIC的中断函数结构体 定义结构体 定义 配置抢占优先级的组别 配置NVIC串口中断的结构体&#xff1a;中断的通道&#xff0c;配置抢占优先级和子优先级 使能CMD 结构体初始化 还有需要配置中断串口的配置&#xff1a; 串口 接…

STM32串口下载

使用FlyMCU下载程序 1.上电前&#xff0c;设置BOOT01&#xff0c;BOOT10。或者是在上电后&#xff0c;设置BOOT01&#xff0c;BOOT10之后&#xff0c;然后按一下复位按键&#xff0c;从而通过串口下载程序。 2.&#xff0c;在MDK编译加载生成的hex文件&#xff0c;并勾选右边的…

STM32 串口发送乱码问题

STM32 串口发送乱码问题 一、问题状况&#xff1a; 显示为一堆乱码&#xff0c;&#x1f4a2;&#x1f620;&#x1f4a2;晕啊 。 二、解决方法 (通常问题是出在step3:调整外部振荡器默认值) step1:检查时钟树配置 设置晶振为开发板上外部晶振一致的8MHz。 step2:检查波…

STM32串口发送和接收

采用标准库 主控STM32F103C8T6 03代码&#xff1a; #include "main.h" #include "led/led.h" #include "exit/exit.h" #include "uart/uart.h"int main() {NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);InitLED();InitExit();I…

stm32串口控制LED灯

实验要求&#xff1a;电脑串口控制单片机的LED灯 led.c #include "led.h" #include "delay.h" /*初始化led所在口的时钟以及一些输入输出的相关设置*/void Led_Init() {GPIO_InitTypeDef GPIO_Initstructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIO…