码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode126 Word Ladder II

时间:2017-09-14 10:44:15      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:class   color   next   leetcode   length   vector   for   bre   logs   

思路:

宽搜过程中分层记录路径,递归还原。
实现:

 1 class Solution 
 2 {
 3 public:
 4     void getPath(string now, string beginWord, string endWord, vector<string>& buf, unordered_map<string, unordered_set<string>>& par, vector<vector<string>>& ret)
 5     {
 6         if (now == beginWord)
 7         {
 8             vector<string> tmp(1, endWord);
 9             for (auto it : buf) tmp.push_back(it);
10             ret.push_back(tmp);
11             reverse(ret.back().begin(), ret.back().end());
12             return;
13         }
14         for (auto it : par[now])
15         {
16             buf.push_back(it);
17             getPath(it, beginWord, endWord, buf, par, ret);
18             buf.pop_back();
19         }
20     }
21     vector<vector<string>> findLadders(string beginWord, string endWord, vector<string>& wordList) 
22     {
23         unordered_set<string> tmp;
24         for (auto it : wordList) tmp.insert(it);
25         unordered_map<string, unordered_set<string>> par;
26         unordered_set<string> q;
27         q.insert(beginWord);
28         bool flg = false;
29         while (!q.empty())
30         {
31             unordered_set<string> next;
32             for (auto it : q)
33             {
34                  for (int i = 0; i < it.length(); i++)
35                 {
36                     for (char c = a; c <= z; c++)
37                     {
38                         string buf = it;
39                         if (buf[i] == c) continue;
40                         buf[i] = c;
41                         if (!tmp.count(buf)) continue;
42                         if (!q.count(buf)) 
43                         {
44                             next.insert(buf);
45                             par[buf].insert(it);
46                         }
47                         if (buf == endWord) flg = true;
48                     }    
49                 } 
50             }
51             for (auto it : q) { tmp.erase(it); }
52             q = next;
53             if (flg) break;
54         }
55         vector<vector<string>> ret;
56         if (flg) 
57         {
58             vector<string> buf;
59             getPath(endWord, beginWord, endWord, buf, par, ret);
60         }
61         return ret;
62     }
63 };

 

leetcode126 Word Ladder II

标签:class   color   next   leetcode   length   vector   for   bre   logs   

原文地址:http://www.cnblogs.com/wangyiming/p/7518509.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!