【数据结构笔记22】图的遍历例题:拯救007(应用DFS)、六度空间(应用BFS)
本次笔记内容:
6.3 应用实例:拯救007
6.4 六度空间
文章目录
- 拯救007
- 题目与分析
- 题目
- 分析
- 总体算法
- 六度空间(Six Degrees of Separation)
- 题目
- 算法思路
拯救007
题目与分析
题目
如上图,007在中心的孤岛上。他必须以鳄鱼为跳板,跳到岸上。那么,收到了这张卫星图,你将告诉007:他能抵达岸边吗?如果能,他该走哪条路呢?
首先应思考两个问题?
- 什么是图的顶点?
- 什么是图的边?
分析
鳄鱼与岸边是顶点,两者距离小于等于007的跳跃距离是边。
总体算法
假设007的第一跳(从孤岛上)距离与其他跳跃不一样。因此,不将007第一跳考虑在递归算法内,寻找第一跳之后的连通集。
void ListComponents(Graph G)
{for (each V in G)if (!visited[V]){DFS(V);}
}void Save007(Graph G)
{for (each V in G){if (!visited[V] && FirstJump(V)){answer = DFS(V);if (answer == YES)break;}}if (answer == YES)output("Yes");elseoutput("No");
}
如上图,本算法可以利用类似ListComponents的思想。
本题目中的DFS算法如下。
int DFS(Vertex V)
{visited[V] = true;if (IsSafe(V))answer = YES;else{for (each W in G)if (!visited[W] && Jump(V, W)){answer = DFS(W);if (answer == YES)break;}}return answer;
}
在这个问题中,图未必要用邻接表或者邻接矩阵来表示,怎么方便怎么来就好。
六度空间(Six Degrees of Separation)
题目
算法思路
- 对每个节点,进行广度优先搜索
- 搜索过程中累计访问的节点数
- 需要记录“层”数,仅计算6层以内的节点数
void SDS()
{for (each V in G){count = BFS(V);Output(count / N);}
}
BFS中需要增加表示层数的变量。
如上图,在普通BFS算法中,增加level变量表示层数,last变量表示这一层结点最后一个,tail指向下一层进队列的最后一个结点。
int BFS(Vertex V)
{visited[V] = true;count = 1;level = 0;last = V; // level 指目前的层数Enqueue(V, Q);while (!IsEmpty(Q)){V = Dequeue(Q);for (V的每个邻接点W)if (!visited[W]){visited[W] = true;Enqueue(W, Q);count++;tail = W;}if (V == last){level++;last = tail;}if (level == 6)break;}return count;
}
【数据结构笔记22】图的遍历例题:拯救007(应用DFS)、六度空间(应用BFS)相关推荐
- 数据结构 笔记:图的遍历(BFS)
时间复杂度的对比分析 MatrixGraph ListGraph addVertex - O(n) removeVertex - O(n^2) getVertex O(1) O(n) setVer ...
- 数据结构 笔记:图的遍历(DFS)
深度优先(DFS) 深度优先算法 -原料:class LinkStack<T>; -步骤: -将起始顶点压入栈中 -弹出栈顶顶点v,判断是否已经标记(标记:转2,为标记:转3) -标记顶点 ...
- 【数据结构基础】图的遍历方法与应用
前言 数据结构,一门数据处理的艺术,精巧的结构在一个又一个算法下发挥着他们无与伦比的高效和精密之美,在为信息技术打下坚实地基的同时,也令无数开发者和探索者为之着迷. 也因如此,它作为博主大二上学期最重 ...
- 数据结构7.3_图的遍历
我们希望从图中某一顶点出发访遍图中其余顶点,且使每一个顶点仅被访问一次. 这一过程就叫做图的遍历. 图的遍历算法是求解图的连通性问题.拓扑排序和求关键路径等算法的基础. 然而,图的遍历要比树的遍历复杂 ...
- 图的遍历c语言数据结构实验报告,数据结构实验报告--图的遍历
江 西 理 工 大 学 数据结构 实验报告 实验名称 图的遍历 日期 2014-12-01 专业班级 计算机(中加)131班 地点 信息学院621 实验人 王鹏伟 学号 同组人 单独完成 152013 ...
- 【数据结构】之图的遍历(C语言)
文章目录 定义 深度优先遍历 广度优先遍历 测试代码 定义 从图中某一顶点出发访遍图中其余顶点,且使每一个顶点仅被访问一次,这一过程就叫做图的遍历(Traversing Graph). 深度优先遍历 ...
- 数据结构笔记9: 图
图的基本概念 图的定义 G=(V,E) 用线(边)连接起来的顶点(节点)的集合 V:顶点的有限集合 E:边的有限集合 基本概念 无向边 有向边 关联至:被指向 关联于:指向 无向图:所有边都是无向边的 ...
- 【数据结构笔记31】Dijkstra算法例题:旅游规划(双权重),以及其他推广
本次笔记内容: 图习题1 核心算法 图习题2 其他推广 文章目录 旅游规划问题 核心算法 Dijkstra算法推广问题 要求数最短路径有多少条 要求边数最少的最短路 旅游规划问题 如上图,优先看权重1 ...
- C语言数据结构与算法---图的遍历
文章目录 一. 深度优先搜索(DFS) 1.概念及实现原理 2. 深度优先遍历的实现代码 1. 若图为邻接矩阵 2. 若图为邻接表 二. 广度优先搜索(BFS) 1. 概念及实现原理 2. 广度优先遍 ...
最新文章
- Tomcat windows下安装
- optparse模块
- 天翼云从业认证(2.3)云计算的价值和核心技术。
- mysql作hive元数据库
- Linux命令行编辑快捷键
- 下拉推广系统立择火星推荐_下拉词删除都择火星下拉
- 【转】Qt串口通信专题教程
- php导入导出xls表,TP5.0 PHPExcel 数据表格导出导入
- 503 service unavailable php,503service unavailable错误提示解决方法
- 中国石油大学OJ 第五场个人训练赛 所罗门王的宝藏
- 设计模式java装饰模式范例_Java设计模式中外观模式和装饰器模式的介绍(代码示例)...
- 铁道部新客票系统设计
- Cocos Creator 微信登录授权按钮适配
- 我的2016——程序员年到三十,工作第四年
- python画生肖兔
- 《人人都是架构师》总结
- 这几款浏览器插件提升科研效率,2023年你安装上了吗
- kali工具熟悉——情报分析
- SQL 注入之二次注入
- Keil5打开工程时,弹窗提示not found device
热门文章
- 【Oracle】to_char技巧
- RestTemplate的异常 Not enough variables available to expand
- Mysql高手系列 - 第20篇:异常捕获及处理详解(实战经验)
- 异常详细信息: System.ComponentModel.Win32Exception: 拒绝访问。
- 抽象函数和虚函数有什么区别?
- mybatis原始mapper开发未集成springMVC
- mysql主从复制巡检脚本_mysql主从复制监控shell脚本
- python wechatpay微信支付回调_python服务器 实现app微信支付:支付异步通知
- html背景颜色白色半透明,HTML – 背景颜色:透明意味着什么?
- ❤️基于Java的方式配置Spring