Leetcode_word-ladder(c++ version)
2014-05-15 11:39
274 查看
地址:http://oj.leetcode.com/problems/word-ladder/
Given two words (start and end), and a dictionary, find the length of shortest transformation sequence from start to end, such that:
Only one letter can be changed at a time
Each intermediate word must exist in the dictionary
For example,
Given:
start =
end =
dict =
As one shortest transformation is
return its length
Note:
Return 0 if there is no such transformation sequence.
All words have the same length.
All words contain only lowercase alphabetic characters.
思路:1. 广度优先遍历搜索到的一定是最短路径(广搜是dijstra的特例).
2. 一次广搜到结果后即可返回
设置visited防止回搜
参考代码:
Given two words (start and end), and a dictionary, find the length of shortest transformation sequence from start to end, such that:
Only one letter can be changed at a time
Each intermediate word must exist in the dictionary
For example,
Given:
start =
"hit"
end =
"cog"
dict =
["hot","dot","dog","lot","log"]
As one shortest transformation is
"hit" -> "hot" -> "dot" -> "dog" -> "cog",
return its length
5.
Note:
Return 0 if there is no such transformation sequence.
All words have the same length.
All words contain only lowercase alphabetic characters.
思路:1. 广度优先遍历搜索到的一定是最短路径(广搜是dijstra的特例).
2. 一次广搜到结果后即可返回
设置visited防止回搜
参考代码:
class Solution { public: int ladderLength(string start, string end, unordered_set<string> &dict) { if(dict.empty() || start == end) return 0; queue<string>strq; queue<int>depq; strq.push(start); depq.push(1); string cur, nxt; int depth; unordered_set<string> visited; while(!strq.empty()) { nxt = cur = strq.front(); strq.pop(); depth = depq.front(); depq.pop(); if(cur == end) return depth; for(int i = 0; i < cur.length(); ++i) { for(char ch = 'a'; ch<='z'; ++ch) { if(ch!=cur[i]) { nxt[i] = ch; if(dict.find(nxt)!=dict.end() && visited.find(nxt)==visited.end()) { visited.insert(nxt); strq.push(nxt); depq.push(depth+1); } nxt = cur; } } } } return 0; } };
相关文章推荐
- Leetcode_word-search(c++ version)
- [C++]LeetCode: 130 Word Ladder (BFS)
- Leetcode_length-of-last-word (updated c++ and python version)
- Leetcode_word-break(c++ and python version)
- leetcode_c++:Word Ladder II(126)
- leetcode_c++:Word Ladder II(126)
- LeetCode:Word Ladder I II
- LeetCode- Word Ladder
- LeetCode之Word Ladder
- LeetCode: Word Ladder II
- Leetcode: Word Ladder II
- [leetcode] Word Ladder II
- LeetCode-Word Ladder
- [LeetCode] Word Ladder II, Solution
- leetcode Word Ladder II hash BFS
- leetcode之word ladder
- LeetCode - Word Ladder II
- LeetCode——Word Ladder II
- leetcode 87: Word Ladder II
- [LeetCode 126] - 单词梯II(Word Ladder II)