图论:单词接龙

import javax.xml.transform.Result;
import java.util.*;

public class Main {
  

    //单词接龙
    public static void main(String[] args) {
         Scanner in = new Scanner(System.in);
         HashSet<String> set=new HashSet<>();
         //<单词,路径>
         HashMap<String, Integer> map =new HashMap<>();

         Deque<String> queue=new ArrayDeque<>();
        int n = in.nextInt();
        String begin =in.next();
        String end= in.next();
        for (int i = 0; i < n; i++) {
            set.add(in.next());
        }
        //存入起点
        queue.offer(begin);
        map.put(begin,1);
        //bfs
        while (!queue.isEmpty()){
            String word =queue.poll();

            for (int i = 0; i < word.length(); i++) {
                StringBuilder sb=new StringBuilder(word);
                for (int j = 0; j < 26; j++) {
                    sb.setCharAt(i, (char) ('a'+j));
                  
                    //newWord代表替换后的单词
                    String newWord=sb.toString();
                   
                    //newWord是结果,收集并返回
                    if (newWord.equals(end)){
                        System.out.println(map.get(word)+1);
                        return;
                    }
                    
                    //newWord合法并且没有被访问过,存入队列和map
                    if (set.contains(newWord)&&!map.containsKey(newWord)){
                        map.put(newWord,map.get(word)+1);
                        queue.offer(newWord);
                    }

                }

            }

        }
        System.out.println(0);

    }
    
}
全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务