搜索(BFS)---最短单词路径

Posted yjxyy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了搜索(BFS)---最短单词路径相关的知识,希望对你有一定的参考价值。

最短单词路径

127. Word Ladder (Medium)

Input:
beginWord = "hit",
endWord = "cog",
wordList = ["hot","dot","dog","lot","log","cog"]

Output: 5

Explanation: As one shortest transformation is "hit" -> "hot" -> "dot" -> "dog" -> "cog",
return its length 5.
Input:
beginWord = "hit"
endWord = "cog"
wordList = ["hot","dot","dog","lot","log"]

Output: 0

Explanation: The endWord "cog" is not in wordList, therefore no possible transformation.

题目描述:

??找出一条从beginword到endword的最短路径,每次移动规定为改变一个字符,并且改变之后的字符串必须在 wordList 中。

思路分析:

??采用BFS的思路找最短路径。

代码:

class Solution 
    public int ladderLength(String beginWord,String endWord,List<String>wordList)
    if(beginWord==null||endWord==null||beginWord.equals(endWord)||!wordList.contains(endWord))
        return 0;
    Queue<String>q=new LinkedList<>();//构造队列辅助BFS
    Set<String>visited=new HashSet<>(); //标记串是否已访问过
    Set<String>dict=new HashSet<>(wordList);//wordList中可能出现重复的串
    q.offer(beginWord);
    visited.add(beginWord);
    int len=1;
    while(!q.isEmpty())
       int size=q.size(); //当前队列中字符串的个数
        for(int s=0;s<size;s++)
            String cur=q.poll();
            for(int i=0;i<cur.length();i++) //对当前字符串的每一位进行改变
                for(char c='a';c<='z';c++)  //搜索的方式
                    char []curArray=cur.toCharArray();
                    char c1=curArray[i];
                    curArray[i]=c;
                    String temp=new String(curArray);
                    if(temp.equals(endWord)) //到达endword
                        return len+1;
                    
                    if(!visited.contains(temp)&&dict.contains(temp))
                        visited.add(temp);
                        q.offer(temp);
                    
                    curArray[i]=c1;//每次只能修改一个字母,所以为了进行下一个位置的搜索,需要还原当前位置的字符。
                
                
            
        
        len++;   //每进行一次大的循环,长度加一。
    
    return 0;

以上是关于搜索(BFS)---最短单词路径的主要内容,如果未能解决你的问题,请参考以下文章

我如何打印 BFS 路径本身而不是这个单词阶梯的路径长度?

c_cpp [bfs] [string]字梯。给定两个单词(开头和结尾)和一个字典,从星上找到最短变换序列的长度

LeetCode-BFS单词接龙

最长最短单词

AC日记——最长最短单词 openjudge 1.7 25

输出最短单词 C语言