首页 > 其他分享 >#4. 图的存储、最短路(未完结)

#4. 图的存储、最短路(未完结)

时间:2024-10-09 15:49:23浏览次数:1  
标签:nxt head 遍历 未完结 int 短路 存储 复杂度

bro高一才开始自学图论

图的存储

建议无脑用链式前向星

0x01. 什么是链式前向星

定义(摘自OI wiki)

本质上是用链表实现的邻接表

具体来说:

以有向边的形式 ,\(head\) 数组存当前边的编号,\(e[i].nxt\) 数组存上一次加的以 \(u\) 为起点的边的编号,这样就能实现用 \(head[u]\) 和 \(e[i].nxt\) 遍历所有出边;\(v\) 存边的终点; \(w\) 存边权

加边操作:

void add (int u, int v, int w) {
    e[++tot].nxt = head[u]; 
    e[tot].v = v; 
    e[tot].w = w;
    head[u] = tot;      
}

找是否存在 \(u\) 到 \(v\) 的边:

bool find(int u, int v) {
    for(int i = head[u]; i; i = e[i].nxt) { 
        if (e[i].v == v) {
          return true;
        }
    }
    return false;
}

遍历一个节点连向的所有出边:

for(int i = head[u]; i; i = e[i].nxt){
    int v = e[i].v, w = e[i].w;
    ...
}

遍历图:

void dfs(int u) {
    if(vis[u]) return;
    vis[u] = true;
    for(int i = head[u]; i; i = e[i].nxt) {
        ...
        dfs(e[i].v);
    }
}

0x02. 性质与复杂度

·可以通过每次多存一条反边来存储树或无向图,复杂度 \(O(m)\)
·可以查询是否存在 \(u\) 到 \(v\) 的边,复杂度 \(O(u)\)
·可以遍历点 \(u\) 的所有出边,复杂度 \(O(u)\)
·可以遍历整张图,复杂度 \(O(n+m)\)
·空间复杂度 \(O(m)\)

任意点对最短路: Floyd 算法

可检测负环单源最短路: Bellman–Ford 算法(以及SPFA)

非负权图单源最短路: Dijkstra 算法

任意点对最短路:Johnson 算法

标签:nxt,head,遍历,未完结,int,短路,存储,复杂度
From: https://www.cnblogs.com/Ydoc770/p/18454192

相关文章

  • 【MATLAB源码-第239期】基于matlab的孔雀优化算法(POA)机器人栅格路径规划,输出做短路
    操作环境:MATLAB2022a1、算法描述孔雀优化算法(PeafowlOptimizationAlgorithm,简称POA)以孔雀(peafowl)的求偶展示行为为灵感,通过模拟这一过程来解决复杂的优化问题。以下是对孔雀优化算法的详细描述:孔雀优化算法是一种基于自然界中孔雀求偶展示行为的群体智能优化算法。孔雀......
  • MCU的最佳存储方案CS创世 SD NAND
        大家都知道MCU是一种"麻雀"虽小,却"五脏俱全"的主控。它的应用领域非常广泛,小到手机手表,大到航空航天的设备上都会用到MCU.市面上目前几个主流厂商有意法半导体(其中最经典的一款就是STM32系列)、TI、NXP、Microchip、瑞萨等等。       那关于MCU的存储方面,......
  • 虚拟存储器的相关知识
    题目考查的是虚拟存储器的相关知识。虚拟存储器的概念虚拟存储器是一种内存管理技术,它允许计算机使用比物理内存(RAM)更多的内存。通过将部分内存内容暂时存储在硬盘上,操作系统可以为运行的程序提供比实际物理内存更大的地址空间。局部性原理局部性原理是指程序在执行过程中,对内......
  • 计算机存储器容量和寻址能力的关系
    这道题目考察的是计算机存储器容量和寻址能力的关系。具体来说,它涉及到以下几个知识点:机器字长:机器字长是指计算机CPU一次能处理的数据的位数。在本题中,机器字长为64位,即8字节(1字节=8位)。存储器容量:存储器容量是指计算机存储器能存储数据的总量。本题中,存储器的容量为128M......
  • 铁威马新品F8 SSD Plus:假期出行的完美存储“伙伴”
    国庆小长假刚刚结束大家都去哪里玩了呢?假期出行如何安全、便捷地存储和管理大量的照片、视频和其他文件也是一个不容忽视的问题 铁威马秋季系列新品NAS的发售为我们提供了多种选择  而F8SSDPlus性能与便携的完美融合成为假期出行不可或缺的“好伙伴” F8......
  • 【C语言】输出数据的二进制存储形式
        说在前面:是一个C语言新手,很新的新手,在这个专栏记录一些探索过程    今天学习中学到类型转换,将int和short类型赋值给char类型变量时,因为想要清楚看到隐式转换的结果,产生了写一个东西来输出数据在计算机中的二进制存储形式的想法,以下为尝试过程一、首先想......
  • 练习题 - 爬虫数据存储方法
    在数据科学和编程实践中,数据的获取和存储是至关重要的步骤之一。在本文中我们将演示如何从《三国志13》的相关网页中抓取人物基础数据,并将这些数据保存到多种不同的文件格式和数据库中。具体来说我们将使用Python编写脚本,利用requests库获取网页内容,使用BeautifulSoup解析H......
  • 数据存储分析
    存储分类1.RAM:运行内存,速度快、掉电数据丢失2.ROM:在单片机中就是Flash。ROM原来指一次性编程存储,后来改善为PROM->EPROM->EEPROM改善增强。Flash是在EPROM的基础上改善而来,相对于EEPROM来说,速度较慢,但都是非易失性存储设备。Flash需要进行扇区读写,EEPROM可以支持字......
  • lightdb pllua存储过程实测
    根据对pl/lua的相关介绍和一些说明如http://www.pgsql.tech/project_305_10000096,其性能相比plpgsql和plsql快不少,那实际到底如何呢?下面拿demo和一些实际的来对比下。1、lua安装。从https://www.lua.org/download.html下载最新版。因为pllua需要依赖lua.so动态库,所以不......
  • c语言中的变量存储区域
    栈局部变量和函数参数通常存储在栈中。函数调用时,栈空间用于存储函数参数、返回地址和局部变量。intfunc(constchar*str1,char*str2,intcount){count++;printf("%s%s\n",str1,str2);returncount;}在这个函数中,参数,局部变量都是存储在栈上的,等函数返回......