
最后四天拯救计划!_搜索1专题_HDU 1181 DFS+BFS 变形课
读取输入,处理每个单词。 将每个单词的首字母转换为对应的数字,作为父节点。 将单词的结尾字母转换为数字,作为可能的子节点。 使用深度优先搜索(DFS)技术,从根节点开始遍历。 在递归过程中,检查当前节点是否是目标节点(m),如果是,则标记结果。 避免重复访问节点,防止死循环。
发布日期:2021-05-08 22:07:49
浏览次数:17
分类:精选文章
本文共 851 字,大约阅读时间需要 2 分钟。
变形课上,Harry遇到了一个难以解决的问题:他需要通过咒语将球变成老鼠。为了完成这项工作,他需要深入研究咒语的变形规律,找出是否存在一个正确的咒语可以实现这一目的。根据问题描述,如果一个咒语以字母b开头,结尾是字母m,那么它就可以将一个球变成老鼠。
于是,Harry给我们留下了一个任务:根据各组输入的单词,判断是否存在一个单词,它的首字母是b,结尾是m。具体来说,给定的测试数据包含多个单词,每个单词代表一个咒语。最后一个输入是0,表示输入结束。
分析问题时,我的思路是将每个单词的首字母作为树状结构中的父节点,而结尾的字母作为子节点。具体来说,可以使用一个字母到数字的映射关系,将26个字母转换为0到25的数字。这样可以将问题转化为图的遍历问题。
接下来,我需要递归地从根节点(对应字母b)开始,遍历所有可能的路径,看是否能找到字母m作为子节点。为了确保不会陷入无限循环,我使用了访问数组 visited 来记录已访问过的节点。
在实现代码时,我需要注意以下关键点:
代码的大致逻辑如下:
- 初始化一个大小为26的集合,用于存储每个字母指向的所有可能结尾字母。
- 读取输入数据,直到遇到0结束。
- 对于每个单词,提取首字母对应的数字,并将其结尾字母对应的数字添加到集合中。
- 进行DFS搜索,从b开始,查看是否能到达m。
这个方法可以有效地解决问题,确保我们能够高效地找到符合条件的咒语。
在代码实现过程中,我使用了以下技术和库:
- 读取输入并处理字符串。
- 使用集合来存储每个字母对应的可能结尾字母。
- 通过递归DFS遍历图结构。
- 使用访问数组记录已访问节点,防止循环。
这样的实现方式既高效又直观,能够处理问题中的所有约束条件。
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年03月29日 17时39分55秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
[整理] 哪些集合类是线程安全的?(Java)
2021-05-09
8 个警示和学习的 5 个阶段
2021-05-09
c# 图片带水纹波动
2021-05-09
H5 贪吃蛇源码
2021-05-09
从零开始学安全(十六)● Linux vim命令
2021-05-09
从零开始学安全(三十四)●百度杯 ctf比赛 九月场 sqli
2021-05-09
3389连接痕迹清除
2021-05-09
发生系统错误 6118
2021-05-09
阿里巴巴Json工具-Fastjson教程
2021-05-09
Spring Cloud Gateway - 快速开始
2021-05-09
Spring Security 实战干货:理解AuthenticationManager
2021-05-09
Java对象转JSON时如何动态的增删改查属性
2021-05-09
Python 面向对象进阶
2021-05-09
Linux常用统计命令之wc
2021-05-09
Git安装及使用以及连接GitHub方法详解
2021-05-09
docker容器与虚拟机的区别
2021-05-09
shell脚本里使用echo输出颜色
2021-05-09
Python2跟Python3的区别
2021-05-09
并发编程——IO模型详解
2021-05-09
Java之封装,继承,多态
2021-05-09