[leetcode] 127. Word Ladder (BFS)

注意点:一次变一个位置上的字母——>相邻,最短——>bfs,访问后删除是由于有最短的要求(若再次访问到意味着形成环,不是最短,所以无效)。bfs借助队列,每轮访问一层(看作树的话),即上一轮所访问节点的所有有效的相邻节点。bfs的框架借助循环+队列实现。

以下,注释的部分直接使用vector,会超时,于是改用unordered_set。

class Solution {
public:
    int ladderLength(string beginWord, string endWord, vector& wordList) {//unordered_set& wordDict
        unordered_set wordDict;
        wordDict.insert(wordList.begin(),wordList.end());
        int res=0;
        queue toVisit;
        /*
        if(find(wordList.begin(),wordList.end(),endWord)==wordList.end()){//没有终点词
            return res;
        }
        */
        if(wordDict.find(endWord)==wordDict.end()) return res;
        ++res;//起点词 
        
        toVisit.push(beginWord);//这两步同时要有
        /*
        vector::iterator iter=find(wordList.begin(),wordList.end(),beginWord);
        if(iter!=wordList.end()){
            wordList.erase(iter);
        }
        */
        wordDict.erase(beginWord);
        
        while(!toVisit.empty()){//队列空可作为终点
            int num=toVisit.size();
            ++res;//位置?
            for(int j=0;j::iterator iter=find(wordList.begin(),wordList.end(),word);
                        if(iter!=wordList.end()){//找到了
                            //下线保存在队列 待处理
                            toVisit.push(word);//这两步同时要有
                            wordList.erase(iter);
                        }
                        */
                        if(wordDict.find(word)!=wordDict.end()){
                            toVisit.push(word);//这两步同时要有
                            wordDict.erase(word);
                        }
                    }
                    word[i]=sourceLetter;
                }
                
            }
        }
        return 0;//队列空 无符合条件方案
    }
};

 

你可能感兴趣的:(leetcode)