回溯法解搜索问题`
class Solution {
public:
bool canTransformed(string A, string B) {
if (A.size() != B.size()) {
return false;
}
int count = 0;
for (int i = 0; i < A.size(); i++) {
if (A[i] != B[i]) {
count++;
}
}
return count == 1;
}
bool hasRoutine(string curWord, string endWord, vector<string>& result, vector<string> &wordlist, vector<bool>& visited) {
if (curWord == endWord) {
return true;
}
for (int i = 0; i < wordlist.size(); i++) {
if (!canTransformed(wordlist[i], curWord) || visited[i]) {
continue;
}
visited[i] = true;
result.push_back(wordlist[i]);
if (hasRoutine(wordlist[i], endWord, result, wordlist, visited)) {
return true;
}
result.pop_back();
}
return false;
}
vector<string> findLadders(string beginWord, string endWord, vector<string>& wordList) {
vector<string> result = { beginWord };
vector<bool> visited(wordList.size(), false);
if (hasRoutine(beginWord, endWord, result, wordList, visited)) {
return result;
}
return vector<string>();
}
};`