
蓝桥杯2013年第四届真题 危险系数
发布日期:2021-05-08 16:24:39
浏览次数:24
分类:精选文章
本文共 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遍历所有可能的路径,确保每条路径都被统计,并通过访问次数找出关键点。这种方法在图论问题中非常常见,能够有效解决路径计数和关键点识别问题。
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年05月09日 16时46分30秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Elasticsearch设置账号密码
2023-01-24
Elasticsearch面试题
2023-01-24
Hibernate二级缓存配置
2023-01-24
element 如何使用自定义icon图标
2023-01-24
element-plus修改主题颜色
2023-01-24
18 个一线工作中常用 Shell 脚本【实用版】
2023-01-24
element-ui:el-input输入数字-整数和小数
2023-01-24
ElementUI-el-progress改变进度条颜色跟文字样式
2023-01-24
element事件(change,click)不触发
2023-01-24
10个高级的 SQL 查询技巧,你掌握了几个?
2023-01-24
ELK原理与介绍(转)
2023-01-24
ELK学习笔记(三)单台服务器多节点部署
2023-01-24
ELK应用日志收集实战
2023-01-24
elTable火狐浏览器换行
2023-01-24
15个Python数据处理技巧(非常详细)零基础入门到精通,收藏这一篇就够了
2023-01-24