当前位置: 首页 > news >正文

题解:AcWing 847 图中点的层次

【题目来源】

AcWing:847. 图中点的层次 - AcWing题库

【题目描述】

给定一个\(n\)个点\(m\)条边的有向图,图中可能存在重边和自环。所有边的长度都是\(1\),点的编号为\(1\sim n\)。请你求出\(1\)号点到\(n\)号点的最短距离,如果从\(1\)号点无法走到\(n\)号点,输出\(-1\)

【输入】

第一行包含两个整数\(n\)\(m\)

接下来\(m\)行,每行包含两个整数\(a\)\(b\),表示存在一条从\(a\)走到\(b\)的长度为\(1\)的边。

【输出】

输出一个整数,表示\(1\)号点到\(n\)号点的最短距离。

【输入样例】

4 5
1 2 
2 3
3 4
1 3
1 4

【输出样例】

1

【算法标签】

《AcWing 847 图中点的层次》 #BFS#

【代码详解】

// 使用STL队列
#include <bits/stdc++.h>
using namespace std;const int N = 100010;  // 节点最大数量
int n, m;  // n: 节点数量,m: 边数量
int h[N], e[N], ne[N], idx;  // 邻接表存储图,h: 头节点数组,e: 边终点数组,ne: 下一条边数组,idx: 边计数器
int d[N];  // 记录从起点到每个节点的距离
bool st[N];  // 记录节点是否被访问过
queue<int> q;  // BFS队列// 添加一条有向边 a->b
void add(int a, int b)
{e[idx] = b, ne[idx] = h[a], h[a] = idx++;
}// 广度优先搜索,返回从节点1到节点n的最短距离
int bfs()
{st[1] = true;  // 标记起点为已访问q.push(1);  // 起点入队memset(d, -1, sizeof(d));  // 初始化距离为-1(表示不可达)d[1] = 0;  // 起点距离为0while (!q.empty()){int t = q.front();  // 取出队首节点q.pop();// 遍历当前节点的所有邻接节点for (int i = h[t]; i != -1; i = ne[i]){int j = e[i];  // 邻接节点编号if (!st[j])  // 如果邻接节点未被访问{st[j] = true;  // 标记为已访问d[j] = d[t] + 1;  // 更新距离q.push(j);  // 入队}}}return d[n];  // 返回到达节点n的距离
}int main()
{cin >> n >> m;  // 读入节点数量和边数量memset(h, -1, sizeof(h));  // 初始化邻接表头节点// 读入边并建图for (int i = 0; i < m; i++){int a, b;cin >> a >> b;add(a, b);}cout << bfs() << endl;  // 输出从1到n的最短距离return 0;
}
// 数据模拟队列
#include <bits/stdc++.h>
using namespace std;const int N = 100010;  // 节点最大数量
int n, m;  // n: 节点数量,m: 边数量
int h[N], e[N], ne[N], idx;  // 邻接表存储图,h: 头节点数组,e: 边终点数组,ne: 下一条边数组,idx: 边计数器
int d[N], q[N];  // d: 记录从起点到每个节点的距离,q: 数组模拟队列// 添加一条有向边 a->b
void add(int a, int b)
{e[idx] = b, ne[idx] = h[a], h[a] = idx++;
}// 广度优先搜索,返回从节点1到节点n的最短距离
int bfs()
{int hh = 0, tt = 0;  // 队列头尾指针q[0] = 1;  // 起点入队memset(d, -1, sizeof(d));  // 初始化距离为-1(表示不可达)d[1] = 0;  // 起点距离为0while (hh <= tt)  // 队列不为空{int t = q[hh++];  // 取出队首节点// 遍历当前节点的所有邻接节点for (int i = h[t]; i != -1; i = ne[i]){int j = e[i];  // 邻接节点编号if (d[j] == -1)  // 如果邻接节点未被访问{d[j] = d[t] + 1;  // 更新距离q[++tt] = j;  // 入队}}}return d[n];  // 返回到达节点n的距离
}int main()
{cin >> n >> m;  // 读入节点数量和边数量memset(h, -1, sizeof(h));  // 初始化邻接表头节点// 读入边并建图for (int i = 0; i < m; i++){int a, b;cin >> a >> b;add(a, b);}cout << bfs() << endl;  // 输出从1到n的最短距离return 0;
}

【运行结果】

4 5
1 2
2 3
3 4
1 3
1 4
1
http://www.jsqmd.com/news/394539/

相关文章:

  • 工业成品多维检测模型 - 指南
  • 2026年铝单板生产厂家实力推荐:金盛铝业有限公司,抗菌/超耐候/仿石材/双曲铝单板全系供应 - 品牌推荐官
  • 武商一卡通如何快速回收?简单安全的平台与流程推荐 - 团团收购物卡回收
  • Sophos Firewall (SFOS) v21.5 MR2 发布 - 下一代防火墙
  • 2026年防腐涂料推荐:鲸鱼防腐涂料,环氧锌黄/煤沥青/云铁/富锌等全系产品供应 - 品牌推荐官
  • 【CTFshow-pwn系列】03_栈溢出【pwn 049】详解:静态编译下的 mprotect 权限修改技巧
  • 2026年车丝机设备厂家推荐:航城科技有限公司,PVC/PE/钢管数控车丝机全系供应 - 品牌推荐官
  • 把坑都踩完了,AI论文写作软件 千笔·专业论文写作工具 VS 云笔AI
  • 2026年光伏系统全流程服务商推荐:浙江兆基电力科技,组件安装/阵列排布/电站施工一站式服务 - 品牌推荐官
  • 2026年流量计生产厂家推荐:江苏雷泰自动化仪表,气体涡轮/超声波/电磁/涡街流量计全品类供应 - 品牌推荐官
  • 2026冲刺用!顶流之选的AI论文软件 —— 千笔ai写作
  • 2026年水肥一体机设备厂家推荐:山东淋垚智慧农业科技,智能/移动/精准施肥设备全系供应 - 品牌推荐官
  • 2026芯片产品公司推荐:深圳市众芯微电子有限公司,a15/CPU/AI/基因芯片等全品类供应 - 品牌推荐官
  • 全网最全 8个降AIGC软件测评:本科生降AI率必备工具推荐
  • 2026年电加热/树脂/衬四氟/外盘管/化工反应釜厂家推荐:无锡鑫泓源石化装备全系供应 - 品牌推荐官
  • 2026年海外移民申请服务推荐:上海加鼎因私出入境,涵盖永居/护照/签证/养老移民全流程 - 品牌推荐官
  • Saliency-Aware Multi-Route Thinking Revisiting Vision-Language Reasoning
  • 2026年镀锌管厂家推荐:天津市茂金金属制品有限公司,热镀锌/焊接/大口径/薄壁等全系镀锌管供应 - 品牌推荐官
  • 信息学奥赛培训教程(配套习题)
  • ReMoRa Multimodal Large Language Model based on Refined Motion Representation for Long-Video Underst
  • 2026年抗氧化剂特丁基对苯二酚厂家推荐:山东百事益食品科技,TBHQ全系产品供应 - 品牌推荐官
  • 2026年陶土板定制新选择:口碑品牌引领行业新风尚,陶百叶/陶棍/陶板/陶砖/陶土板,陶土板施工工艺推荐排行榜 - 品牌推荐师
  • 2026年钢板开平线厂家实力推荐:淄博瑞麟机械,伺服/全自动/不锈钢开平线全系解决方案 - 品牌推荐官
  • 反击式破碎机技术新趋势:盘点用户信赖的优质厂商,双辊破碎机/锤式破碎机/颚式破碎机,反击式破碎机实力厂家有哪些 - 品牌推荐师
  • Java面试场景:从Spring Boot到微服务与云原生的深度探索
  • 2026年满意度调查服务公司推荐:深圳市上书房信息咨询有限公司,员工/物业/顾客满意度调研全覆盖 - 品牌推荐官
  • 2026年清洗烘干线设备厂家推荐:济宁鑫欣超声电子,全自动多工位/龙门式/真空等全系供应 - 品牌推荐官
  • 2026年振动筛设备厂家推荐:新乡市华恒机械设备有限公司,长方形/轻型/不锈钢等振动筛全系供应 - 品牌推荐官
  • 2026涿州装修服务公司推荐:松然装饰全包/半包/奶油风/别墅装修设计一站式解决方案 - 品牌推荐官
  • 2026年工业PH计专业厂家推荐:中核仪表在线PH计/工业PH计/PH电极全系列解决方案 - 品牌推荐官