【C/C++】vector建图

只是一个鶸用来记录学习内容的文章罢了,如果能多少帮到你那真是太好了,发现错误欢迎指正。

vector建图是利用vector数组长度可变的特点来建立邻接表以存储图结构。

初始化

vector<int> g[n];//n为顶点数

初始化一个一维数组g,g里面的每个元素都是一个vector数组。

画在图上大概是这个样子。
在这里插入图片描述
因为vector数组的长度是可以动态扩容的,所以通常情况下建立稀疏图的时候可以比邻接矩阵节省一些空间,同时相比用数组加链表建图又更加易于操作。比如洛谷P5318需要排序,只需要用sort对g中的每个vector数组排序就好,如果是数组加链表不见得能更简单。

建图

建图和普通的邻接表差不多。我们计划让g[a]的vector数组里存放a能直接到达的点b1,b2,b3…

比如下图
在这里插入图片描述
用vector建图完之后就是这样
在这里插入图片描述

所以,当知道一条边的起点和终点之后,只要将终点插在起点所在的vector数组的末尾就好了。当所有边都按此法输入后图就建立完成了。

while(m--){
   //m为边数 
		scanf("%d%d",&a,&b);//a--->b
		g[a].push_back(b);//将终点插在起点所在的vector数组的末尾
	}

基于vector建图的深搜和广搜

最后附上vector建图的深搜广搜代码供参考,同时也是P5318的AC代码,深搜广搜不是本文的重点就不细说了。

#include <bits/stdc++.h>
using namespace std;
int flag1=0,flag2=0;
void dfs(vector<int>* g,int n,int i
  • 10
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值