
蓝桥杯2013年第四届真题 危险系数
发布日期:2021-05-08 16:24:39
浏览次数:21
分类:精选文章
本文共 1931 字,大约阅读时间需要 6 分钟。
在实际开发过程中,我们常常需要解决图中的路径问题。特别是当我们需要计算从图的某个起点到终点的所有可能路径数时,深度优先搜索(DFS)是一种非常有效的方法。通过DFS,我们不仅可以统计路径的数量,还可以找出在所有路径中被访问次数等于总路径数的关键点。
代码解析
#includeusing namespace std;int map[1001][1001]; // 邻接矩阵int path[1001]; // 存储路径int vis[1001]; // 当前结点标志位int times[1001]; // 存储结点经过的次数int num = 0, v; // num表示路径的数量,v表示终点void DFS(int u, int n) { if (u == v) { // 到达终点 num++; // 路径数量加1 for (int i = 1; i <= n; i++) { if (path[i]) { times[i]++; // 每个经过的结点次数加1 } } } for (int i = 1; i <= n; i++) { if (map[u][i] == 1 && vis[i] == 0) { vis[i] = 1; path[i] = 1; DFS(i, n); vis[i] = 0; // 考虑后面还可能会经过i结点,所以要重新设置为0 path[i] = 0; } }}int main() { int count = 0, m, n, u; for (int i = 0; i < 1001; i++) { vis[i] = path[i] = times[i] = 0; for (int j = 0; j < 1001; j++) map[i][j] = 0; } cin >> n >> m; for (int i = 0; i < 1001; i++) { cin >> u >> v; map[u][v] = map[v][u] = 1; } cin >> u >> v; DFS(u, n); if (num) { for (int i = 1; i <= n; i++) { if (times[i] == num && i != u && i != v) { // 当路径数量和结点的次数相同,且结点不是起点和终点 count++; } } cout << count << endl; } return 0;}
代码功能解释
邻接矩阵:map
是一个二维数组,用于存储图的邻接信息。map[u][i]
表示节点u
可以直接到达节点i
。
访问标记和路径标记:vis
数组用于记录当前结点是否已被访问,避免重复访问。path
数组用于记录当前路径中的结点,方便后续处理。
路径计数:num
变量用于存储从起点到终点的路径总数。
关键点判定:times
数组用于记录每个结点在所有路径中被访问的总次数。通过比较times[i]
与num
,可以找出关键点。
代码运行流程
初始化:在main
函数中,首先将所有节点的访问标记、路径标记和访问次数初始化为0,并将邻接矩阵初始化为空。
读取输入:读取图的节点数n
和边数m
。然后读取m
条边信息,并更新邻接矩阵。
DFS搜索:调用DFS(u, n)
,从起点u
开始进行深度优先搜索。
计算关键点:在DFS
找到终点v
后,统计所有路径数,并计算每个结点的访问次数。最后,找出访问次数等于路径数且不是起点和终点的关键点,输出关键点的数量。
关键点判定逻辑
路径数num
:当DFS
第一次到达终点v
时,num
增加1,表示有一条完整的路径。
关键点判断:在所有路径完成后,遍历所有节点。如果某个节点的访问次数等于路径数且不是起点和终点,则该节点是关键点。
这种方法通过DFS遍历所有可能的路径,确保每条路径都被统计,并通过访问次数找出关键点。这种方法在图论问题中非常常见,能够有效解决路径计数和关键点识别问题。
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年04月07日 10时51分05秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Java基础IO流(一)
2019-03-06
Hibernate入门(四)---------一级缓存
2019-03-06
MySQL事务(学习笔记)
2019-03-06
一个web前端开发者的日常唠叨
2019-03-06
内存分配-slab分配器
2019-03-06
技术写作技巧分享:我是如何从写作小白成长为多平台优秀作者的?
2019-03-06
Jupyter Notebook 暗色自定义主题
2019-03-06
[Python学习笔记]组织文件
2019-03-06
基于Redo Log和Undo Log的MySQL崩溃恢复流程
2019-03-06
从RocketMQ的Broker源码层面验证一下这两个点
2019-03-06
如何正确的在项目中接入微信JS-SDK
2019-03-06
纵览全局的框框——智慧搜索
2019-03-06
快服务流量之争:如何在快服务中占领一席之地
2019-03-06
【活动】直播揭秘<如何从0开发HarmonyOS硬件>
2019-03-06
Unity平台 | 快速集成华为性能管理服务
2019-03-06
对模拟器虚假设备识别能力提升15%!每日清理大师App集成系统完整性检测
2019-03-06
使用Power BI构建数据仓库与BI方案
2019-03-06
Django认证系统并不鸡肋反而很重要
2019-03-06
tep用户手册帮你从unittest过渡到pytest
2019-03-06
12张图打开JMeter体系结构全局视角
2019-03-06