内部for循环从0迭代到队列大小的原因是,随着搜索的发展:
-
将向您迭代的队列中添加新词,
-
同时,当前单词将从该队列中删除。
这个for循环将迭代限制为队列中最初的单词,并确保对队列所做的修改不会影响搜索的当前阶段。
如果你再盯着它看一会儿,你就会看到发生了什么。
class Solution {
public:
int ladderLength(string beginWord, string endWord, unordered_set<string>& wordDict) {
wordDict.insert(endWord);
queue<string> toVisit;
addNextWords(beginWord, wordDict, toVisit);
int dist = 2;
while (!toVisit.empty()) {
int num = toVisit.size();
for (int i = 0; i < num; i++) {
string word = toVisit.front();
toVisit.pop(); // <-- remove from front of queue
if (word == endWord) return dist;
addNextWords(word, wordDict, toVisit); // <-- add to back of queue
}
dist++;
}
}