字符串状态转换 【最短路径】


题目描述
给定两个单词(初始单词和目标单词)和一个单词字典,请找出所有的从初始单词到目标单词的最短转换序列的长度:
每一次转换只能改变一个单词
每一个中间词都必须存在单词字典当中
例如:
给定的初始单词start="red",
目标单词end ="tax"。
单词字典dict =["ted","tex","red","tax","tad","den","rex","pee"]
一个最短的转换序列为"red" -> "ted" -> "tad" -> "tax",
返回长度4

注意:
如果没有符合条件的转换序列,返回0。
题目中给出的所有单词的长度都是相同的
题目中给出的所有单词都仅包含小写字母



#define dist second
#define str  first
typedef pair State;
class Solution {
public:
    int ladderLength(string start, string end, unordered_set &dict) {
        if(start==end) return 0;
        queue q;
        q.push({start,0});
//         unordered_map _map;
        while (q.size()) {
            auto state = q.front();q.pop();
            string s = state.str;int dist = state.dist;
            if(s==end) {
                return dist+1;//搜索到终点
            }
            if(!dict.count(s)) continue;
            dict.erase(s);
            for(int i=0;i

相关