图中点的层次题解

news/2024/6/29 11:49:05 标签: 算法, 数据结构, c++, 宽度优先

本题我采用邻接表来存储图,由题目所有边的长度为1可以知道本题可以采用bfs来做。 

#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
const int N = 1e5 + 9;
int e[N], ne[N], h[N], idx, n , m, d[N];

void add(int a, int b)
{
	e[idx] = b, ne[idx] = h[a], h[a] = idx++;
}

int bfs()
{
	queue<int> q;
	memset(d, -1, sizeof d);
	d[1] = 0;
	q.push(1);
	while (q.size())
	{
		auto t = q.front();
		q.pop();
		for (int i = h[t]; i != -1; i = ne[i])
		{
			int j = e[i];//表示t能到达的点
			if (d[j] == -1)
			{
				d[j] = d[t] + 1;
				q.push(j);
			}
		}
	}
	return d[n];
}

int main()
{
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	memset(h, -1, sizeof h);//添加前初始化
	cin >> n >> m;
	for (int i = 1; i <= m; ++i)
	{
		int a, b; cin >> a >> b;
		add(a, b);
	}
	cout << bfs();
	return 0;
}

用数组来模拟邻接表,首先初始化h[]数组都为-1,表示图中没有边,e[]代表h[]所代表连接点的编号,ne[]就是指向下一个元素,d[]代表走到这个点的最短距离。要保证每个点只被走过一次,这样第一次走过这个点就是最短距离。用d[]保存是否被走过,所以初始化为-1。


http://www.niftyadmin.cn/n/5120793.html

相关文章

【Linux】IP协议

文章目录 &#x1f4d6; 前言1. 网络层2. IP协议格式3. IP报文分片和组装3.1 如何分片和组装&#xff1a;3.2 组装的衍生问题&#xff1a; 4. 网段划分&#xff08;重点&#xff09;4.1 子网掩码&#xff1a;4.2 IP地址的数量限制&#xff1a;4.3 私有IP地址和公网IP地址&#…

css overflow-x: scroll 滚动不展示/隐藏滚动条 /如何滚动

overflow-x:scroll 实现滚动效果 .scroll{width: 300rpx;height: 100rpx;//超出部分隐藏overflow-x: hidden;//禁止换行white-space: nowrap;//显示滚动条overflow-x: scroll; } 操作滚动条的伪类元素 ::-webkit-scrollbar — 整个滚动条.::-webkit-scrollbar-button — 滚动…

Jenkins 安装全攻略:从入门到精通

目录 一&#xff1a;安装文件夹准备 1.打开&#xff0c;/home/admin目录 2.新建三个文件夹 二&#xff1a;安装tomcat 1.打开tomcat目录进行tomcat安装 2.解压tomcat文件 3.开放端口号 4.启动tomcat 5.浏览器访问tomcat 三&#xff1a;安装Maven 1.打开maven目录进行…

使用jdbc技术连接数据库

连接数据库 <dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.28</version><scope>compile</scope></dependency> </dependencies> g…

代碼隨想錄算法訓練營|第四十六天|完全背包、518. 零钱兑换 II、377. 组合总和 Ⅳ。刷题心得(c++)

目录 动态规划 - 完全背包 和01背包的差別 定義 核心代碼 遍歷順序 總結 讀題 518. 零钱兑换 II 自己看到题目的第一想法 看完代码随想录之后的想法 377. 组合总和 Ⅳ 自己看到题目的第一想法 518. 零钱兑换 II - 實作 思路 Code 377. 组合总和 Ⅳ - 實作 思路…

餐饮业如何高效经营?赶紧闭眼抄这个方法!

在现代社会&#xff0c;餐饮业已经成为人们日常生活中不可或缺的一部分。为了提高食堂运营效率&#xff0c;满足不断增长的客户需求&#xff0c;智慧收银系统应运而生。 智慧收银系统帮助食堂业主更好地理解其客户&#xff0c;提高服务质量&#xff0c;优化库存管理&#xff0c…

三季报开启消费电子增长新纪元?看蓝思科技如何落子

10月18日晚间&#xff0c;蓝思科技公布了2023年第三季度报告。根据报告&#xff0c;蓝思科技第三季度营业收入136.31亿元&#xff0c;同比增长9.98%&#xff0c;环比增长31.85%&#xff1b;归母净利润10.95亿元&#xff0c;同比增长2.93%&#xff0c;环比119.88%。 作为消费电…

c# sqlite 修改字段类型

因为sqlite不支持直接修改字段类型&#xff0c; 所以只能创建新的表&#xff0c;再将原始数据复制过去。具体操作步骤如下&#xff1a; 第一步&#xff0c; 将表“tableName”的名称修改为 “oldTable” string queryString string.Format("ALTER TABLE {0} RENAME TO …