第8章|图与并查集

Unit 09 · LeetCode #127 单词接龙

仅本次页面有效
U09
Implicit Graph BFSGenerate Neighbor → Enqueue Once → Expand by Layer → First Hit Is Shortest

图的边不一定预先写出来,
也可以在搜索时即时生成。

把每个单词视为节点;两个单词只差一个字符时存在边。BFS 按转换步数分层扩展,第一次到达 endWord 时得到最短转换序列。关键不是枚举全部单词对,而是对当前单词逐位置替换字符,只保留仍在候选集合中的新单词。

检测到上次学习现场阶段、案例、BFS 层、候选词、代码槽位和迁移进度均可恢复。

LeetCode #127 · 单词接龙

给定两个单词 beginWord、endWord 和字典 wordList。一次转换只能改变一个字母,且转换后的每个中间单词必须存在于字典中。返回从起始单词到目标单词的最短转换序列所包含的单词数量;不存在转换序列时返回 0。

示例 1 输入:beginWord = "hit", endWord = "cog" wordList = ["hot","dot","dog","lot","log","cog"] 输出:5 解释:hit → hot → dot → dog → cog 示例 2 输入:beginWord = "hit", endWord = "cog" wordList = ["hot","dot","dog","lot","log"] 输出:0

约束与 Python 签名

1 ≤ beginWord.length ≤ 10 endWord.length == beginWord.length 1 ≤ wordList.length ≤ 5000 wordList[i].length == beginWord.length 单词仅由小写英文字母组成 wordList 中单词互不相同 beginWord != endWord class Solution: def ladderLength(self, beginWord, endWord, wordList): ...

本实验采用单向 BFS。队列中的长度表示“从 beginWord 到当前单词的序列单词数”。

Implicit Graph

节点显式给出,但边不预建;访问当前节点时根据规则生成邻居。

One-Letter Neighbor

长度相同且恰好一个位置字符不同,才构成一条无权边。

BFS Layer

同一层中的单词具有相同最短序列长度;下一层统一加一。

Mark on Enqueue

单词第一次入队时立即从候选集合删除,避免重复入队。

隐式图 BFS步骤 1