大规模图的存储(前向星、next数组)
大规模图的储存
在信息学中,经常会遇到比较大规模图,使用指针固然是很好的方法,不过一有指针速度不如数组之说,二有指针不如数组稳定之说,三有,也是最重要的,指针不如数组来得方便,这也便是大多数Oier不愿意用指针的缘由了,但若遇到大规模的图(或者树)又如何是好呢?先不说邻接矩阵的储存问题,就是速度也成问题。
下面,就总结一下一些常用的,个人认为比较实用的用数组替代指针的方法:前向星与next数组
可以看到,相对于点来说,边是很少的,也就是说是一个稀疏图,肯定不能用邻接矩阵,只能从存边的角度考虑(u,v,w:array[1..maxm] of longint;)关键是如何能够快速的利用。
前向星是一种容易想到的方法:增加left:array[1..maxn] of longint;用left[i]来保存每个从i节点出发的边集的起始位置。再将数组按照u排序,然后一个线形扫描就可以得出所有left和right。
readln(n,m);
for i:=1 to m do readln(u[i],v[i],w[i]);
sort(u,1,m);
u[0]:=0;
for i:=m downto 1 do
begin
for j:= u[i-1]+1 to u[i]
left[j]:=i;
end;
{===========================================}
next数组是一种更为简洁,并且更为快速的方法。增加point:array[1..maxn] of longint;和next:array[1..maxm] of longint;point[i]表示第一条i节点出发的边的位置,next[i]表示i这一条边的下一条兄弟边(即同属于i出发)的位置。代码更简单:
readln(n,m);
for i:=1 to m do begin
readln(u,v[i],w[i]);
next[i]:=point[u];
point[u]:=i;
end;
k
p:=point[k];
while p<>0 do
begin
if (f(v[p])=false) and ((dist[k]+w[p])<dist[v[p]]) then
dist[v[p]]:=dist[k]+w[p];
p:=next[p];
end
{===========================================}
大规模图的存储(前向星、next数组)的更多相关文章
- POJ 1985.Cow Marathon-树的直径-树的直径模板(BFS、DFS(vector存图)、DFS(前向星存图))
Cow Marathon Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 7536 Accepted: 3559 Case ...
- 洛谷P3916||图的遍历||反向建图||链式前向星||dfs
题目描述 给出 NN 个点, MM 条边的有向图,对于每个点 vv ,求 A(v)A(v) 表示从点 vv 出发,能到达的编号最大的点. 解题思路 看起来很简单的一道题, 但我依然调了一天,我还是太菜 ...
- UESTC30-最短路-Floyd最短路、spfa+链式前向星建图
最短路 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) 在每年的校赛里,所有进入决赛的同 ...
- UESTC 30.最短路-最短路(Floyd or Spfa(链式前向星存图))
最短路 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) 在每年的校赛里,所有进入决赛的同 ...
- # [Poj 3107] Godfather 链式前向星+树的重心
[Poj 3107] Godfather 链式前向星+树的重心 题意 http://poj.org/problem?id=3107 给定一棵树,找到所有重心,升序输出,n<=50000. 链式前 ...
- 图的存储结构:邻接矩阵(邻接表)&链式前向星
[概念]疏松图&稠密图: 疏松图指,点连接的边不多的图,反之(点连接的边多)则为稠密图. Tips:邻接矩阵与邻接表相比,疏松图多用邻接表,稠密图多用邻接矩阵. 邻接矩阵: 开一个二维数组gr ...
- 图论之初,拓扑排序、前向星(通过存储边来存储图)加优先队列对拓扑的优化-----hdu1285
确定比赛名次 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- 最短路 spfa 算法 && 链式前向星存图
推荐博客 https://i.cnblogs.com/EditPosts.aspx?opt=1 http://blog.csdn.net/mcdonnell_douglas/article/deta ...
- POJ-1511 Invitation Cards---Dijkstra+队列优化+前向星正向反向存图
题目链接: https://vjudge.net/problem/POJ-1511 题目大意: 给定节点数n,和边数m,边是单向边. 问从1节点出发到2,3,...n 这些节点路程和从从这些节点回来到 ...
随机推荐
- linux svn
1.回滚 一直在找svn回滚的方法,这个还是很实用的,屡试不爽阿 经常由于坑爹的需求,功能要切回到之前的某一个版本.有两种方法可以实现: 方法1: 用svn merge 1) 先 svn up,保证 ...
- Codevs 1910递归函数
1910 递归函数 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 对于一个递归函数w(a, b, c). 如果a <= ...
- 【转】【MySQL】mysql 通过bin-log恢复数据方法详解
mysql中bin-log在mysql默认状态下是没有打开的,我们要先打开mysql 开启bin-log功能,然后再通过备份的bin-log进行数据库恢复了. 具体的操作是通过mysqlbinlog这 ...
- dynamic获取类型可变的json对象
使用dynamic获取类型可变的json对象 Dictionary<string, object> dict = new Dictionary<string, object>( ...
- Orchard CMS中如何打包不带源码的模块
在Orchard CMS的官网已经提供了文档说明如何打包,但是如果使用它的打包方式,打好的nuget包是带源代码的.如果是为开源系统写模块,不需要关注源代码是否可见.但是如果是用Orchard CMS ...
- React Native开发技术周报1
(一).资讯 1.React Native 0.21版本发布,最新版本功能特点,修复的Bug可以看一下已翻译 重要:如果升级 Android 项目到这个版本一定要读! 我们简化了 Android 应用 ...
- ubuntu-12.10-server安装图形界面
1.首先你需要确定你的源文件中 /etc/apt/sources.list 已经使用Universe和Multiverse库.然后使用下面的命令来进行更新源列表和安装图形桌面. sudo apt-ge ...
- WPF 异步加载高清大图
不管什么东西,但凡太大了,总是让人又爱又恨啊!(很有道理的样子,大家鼓掌└( ̄  ̄└)(┘ ̄  ̄)┘) 猿:老板,现在这社会啊,真是浮躁啊,之前还是什么1080P,然后就到了2K,现在又到了4K……他 ...
- 基于jquery实现的上传图片及图片预览效果代码
<!DOCTYPE html> <html> <head> <title>HTML5上传图片预览</title> <meta http ...
- springMVC之applicationcontext.xml配置说明
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...