为何我的BFS算法无法返回单词接龙的预期最短路径?
单词接龙最短路径BFS实现指南
看起来你已经找对方向啦——BFS(广度优先搜索)确实是解决这类最短路径问题的最优选择,因为它是按层级遍历的,第一次遇到目标单词时的层级就是最短路径长度。下面我来帮你把思路补全,再结合你的测试用例详细拆解:
核心思路
BFS的核心是按“层”处理所有可能的单词转换:每一层对应路径长度的递增,一旦在某一层找到endWord,当前的路径长度就是答案。同时我们需要避免重复处理同一个单词(防止循环),还要优化单词存在性的查询效率。
具体实现步骤
- 先把
wordList转换成集合:集合的查找时间复杂度是O(1),比列表的O(n)高效太多,能大幅提升算法速度。 - 初始化队列:每个队列元素要包含两个信息——当前单词和当前路径长度,比如初始队列是
[("hit", 1)](路径长度从1开始,因为起始单词本身算一个节点)。 - 维护已访问集合:记录已经处理过的单词,避免重复入队造成循环。
- 循环处理队列:
- 取出队首的单词和路径长度,如果当前单词就是
endWord,直接返回路径长度。 - 遍历当前单词的每个字符位置,把每个位置依次替换成a-z的所有字母,生成新单词。
- 检查新单词是否在
wordList集合中且未被访问过,如果是,就将其加入队列(路径长度+1),同时标记为已访问。
- 取出队首的单词和路径长度,如果当前单词就是
针对你的测试用例走查
测试用例:beginWord = "hit",endWord = "cog",wordList = ["hot","dot","dog","lot","log","cog"]
预期输出:5,对应路径hit->hot->dot->dog->cog
- 初始队列:
[("hit", 1)],已访问集合:{"hit"} - 处理
hit:生成所有单字符替换的单词,其中hot在wordList中,加入队列,路径长度变为2,队列变为[("hot", 2)] - 处理
hot:生成dot、lot等有效单词,加入队列,路径长度3,队列变为[("dot", 3), ("lot", 3)] - 处理
dot:生成dog加入队列(路径4);处理lot生成log加入队列(路径4) - 处理
dog:生成cog,正好是endWord,此时路径长度为5,直接返回结果。
代码示例(Python)
from collections import deque def ladderLength(beginWord, endWord, wordList): word_set = set(wordList) # 提前判断目标词是否在列表中,避免无效遍历 if endWord not in word_set: return 0 visited = set() queue = deque() queue.append((beginWord, 1)) visited.add(beginWord) while queue: current_word, path_length = queue.popleft() # 找到目标词,直接返回当前路径长度 if current_word == endWord: return path_length # 遍历单词的每个字符位置 for i in range(len(current_word)): # 尝试替换为a-z的每个字母 for c in 'abcdefghijklmnopqrstuvwxyz': if c == current_word[i]: continue # 跳过和原字符相同的情况,避免无效生成 new_word = current_word[:i] + c + current_word[i+1:] # 检查新单词是否有效且未被访问 if new_word in word_set and new_word not in visited: visited.add(new_word) queue.append((new_word, path_length + 1)) # 遍历完所有可能仍未找到路径,返回0 return 0 # 测试你的用例 beginWord = "hit" endWord = "cog" wordList = ["hot","dot","dog","lot","log","cog"] print(ladderLength(beginWord, endWord, wordList)) # 输出5
优化小技巧
如果你的wordList规模很大,可以试试双向BFS:同时从beginWord和endWord两边开始遍历,当两边的遍历集合相遇时,将两边的路径长度相加就是最短路径。这种方式能大幅减少需要遍历的节点数量,提升效率。
内容的提问来源于stack exchange,提问作者Uthman
相关产品推荐
相关产品推荐

