vector快速存图 存图的方法 数据结构

本文介绍了四种主流的图存储方法:二维数组、邻接表、前向星和链式前向星,重点讨论了二维数组和vector在存图上的优缺点。二维数组存图简单但易浪费空间,当节点数量较大时不宜使用。而vector作为C++的容器,具备空间利用率高、自动扩容、随机访问等优点,是存图的良好选择,特别适合新手使用。在构建图时,可以使用vector<edge>存储边信息,方便快捷。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单引入

存图的方法,主流的是4种。

分别是利用二维数组、构建邻接表、前向星、和链式前向星。

第一种二维数组的存图方式,优点是非常方便,只需要定义一个二维数组,就可以很快速的存图、和方便的读取。但是它的缺点也非常明显,就是容易造成空间的大量浪费。在实际解题中,一旦数据量超过一万个结点,就可以直接放弃,否则很容易爆内存。

第二种构建邻接表,空间和时间复杂度都可以接受,查找比二维数组稍慢,但是不会浪费空间。是常用的一种存图方式,但是缺点是,需要自己构建邻接表的数据结构,因此尤其对于刚学习邻接表的新手来说,不太友好,会花费一定时间在构造和查找上。

第三种前向星,用的相对不多,感兴趣的自己了解。

第四种链式前向星,跟第二种邻接表有些相似,但是存储逻辑稍有不同,特点都是不会浪费空间,时间复杂度也不高,同样需要自己构建。

实现方法

vector存图,常见的实现如下:

struct edge {int to,int value};
vector<edge> map[maxn];

maxn为节点的最大数量,to表示联通的节点,value表示权值。
在存图时,map[n][0].to、map[n][0].value就表示联通第n个节点的第一条边的节点、权值。

vector的存图优势

vector是c++ STL里的一个容器,它的继承了其它容器的共性,即空间可变,自动扩容。
因此用它存图的第一个好处就是不会浪费太多空间。

其次,vector作为c++中的容器,可以直接调用,存图时不需要自行编写代码,这一点比邻接表和链式前向星要强很多。

第三,vector是顺序结构,支持随机访问,某些题中查找速度比邻接表和前向星可能更快。

总结:c++有vector这种好东西,不用白不用。(尤其对于新手)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值