图论第5天

 127.单词接龙

 需要cout看一下过程。

#include <iostream>
#include <queue>
#include <stack>
#include <unordered_map>
#include <unordered_set>
#include <vector>
using namespace ::std;

class Solution
{
public:
    int ladderLength(string beginWord, string endWord, vector<string> &wordList)
    {
        unordered_set<string> wordSet(wordList.begin(), wordList.end()); // 换成unordered_set后查询速度增加
        if (wordSet.find(endWord) == wordSet.end())
            return 0;
        unordered_map<string, int> visitMap; //<word,查询到的路径长度>
        queue<string> que;
        que.push(beginWord);
        visitMap.insert(pair<string, int>(beginWord, 1));
        while (!que.empty())
        {
            string cur_word = que.front();
            que.pop();
            int path = visitMap[cur_word];
            for (int i = 0; i < cur_word.size(); i++)
            {
                string new_word = cur_word;
                for (int j = 0; j < 26; j++)
                {
                    new_word[i] = j + 'a';
                    if (new_word == endWord)
                        return path + 1;
                    if (wordSet.find(new_word) != wordSet.end() && visitMap.find(new_word) == visitMap.end())
                    {
                        visitMap.insert(pair<string, int>(new_word, path + 1));
                        que.push(new_word);
                    }
                }
                cout << cur_word << endl;
                cout << i << endl;
                for (pair<string, int> x : visitMap)
                {
                    cout << "visitMap[" << x.first << "] = " << x.second << "   ";
                }
                cout << endl;
            }
        }
        return 0;
    }
};

int main()
{
    Solution syz;
    string beginWord = "hit", endWord = "cog";
    vector<string> wordList;
    wordList.push_back("hot");
    wordList.push_back("dot");
    wordList.push_back("dog");
    wordList.push_back("lot");
    wordList.push_back("log");
    wordList.push_back("cog");
    syz.ladderLength(beginWord, endWord, wordList);
    return 0;
}

cout运行结果需要看一下,理解一下过程:

所有的word的字母都需要执行一次,所以是0、1、2,

hit 改 h是没有单词加入的,改i会有个hot,改t没有单词加入,所以visitMap里不变。hit这时候已经pop()。

hot改h,增加两个dot\lot,改o\t没有,hot.pop()。

竟然是先dot后lot,跟push顺有关。hot会先push “ d ” 后 push " l "

dot,d\o都没有,t改完,出现一个dog,g会继续往下走,dot.pop() 

lot,l\o都没有,出现log.pop()

这时候que里,front 是dog,然后是 log

dog直接知道cog。visitMap[dog] = 4,4 + 1 = 5

hit
0
visitMap[hit] = 1
hit
1
visitMap[hot] = 2   visitMap[hit] = 1
hit
2
visitMap[hot] = 2   visitMap[hit] = 1
hot
0
visitMap[dot] = 3   visitMap[lot] = 3   visitMap[hot] = 2   visitMap[hit] = 1
hot
1
visitMap[dot] = 3   visitMap[lot] = 3   visitMap[hot] = 2   visitMap[hit] = 1
hot
2
visitMap[dot] = 3   visitMap[lot] = 3   visitMap[hot] = 2   visitMap[hit] = 1
dot
0
visitMap[dot] = 3   visitMap[lot] = 3   visitMap[hot] = 2   visitMap[hit] = 1
dot
1
visitMap[dot] = 3   visitMap[lot] = 3   visitMap[hot] = 2   visitMap[hit] = 1
dot
2
visitMap[dog] = 4   visitMap[dot] = 3   visitMap[lot] = 3   visitMap[hot] = 2   visitMap[hit] = 1
lot
0
visitMap[dog] = 4   visitMap[dot] = 3   visitMap[lot] = 3   visitMap[hot] = 2   visitMap[hit] = 1
lot
1
visitMap[dog] = 4   visitMap[dot] = 3   visitMap[lot] = 3   visitMap[hot] = 2   visitMap[hit] = 1
lot
2
visitMap[log] = 4   visitMap[dog] = 4   visitMap[dot] = 3   visitMap[lot] = 3   visitMap[hot] = 2   visitMap[hit] = 1

广搜更适合这道题,会把所有可能性在起始点周边的可能性,一点点往外扩,不会造成走冤枉路。

图论看来一道题就要很刺激啊。 T _ T。明天摸鱼看能不能做两道吧。

相关推荐

  1. 5

    2024-06-07 10:24:04       34 阅读
  2. 2024-06-07 10:24:04       30 阅读
  3. 6

    2024-06-07 10:24:04       28 阅读
  4. 9

    2024-06-07 10:24:04       24 阅读
  5. 8

    2024-06-07 10:24:04       25 阅读
  6. 第一

    2024-06-07 10:24:04       35 阅读
  7. 第二

    2024-06-07 10:24:04       27 阅读
  8. 算法总结归纳(十二)(剩余的

    2024-06-07 10:24:04       59 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-07 10:24:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-07 10:24:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-07 10:24:04       82 阅读
  4. Python语言-面向对象

    2024-06-07 10:24:04       91 阅读

热门阅读

  1. WPF 按键图标缩放动画示例

    2024-06-07 10:24:04       26 阅读
  2. 推箱子小游戏C++

    2024-06-07 10:24:04       37 阅读
  3. Hadoop文件存储格式

    2024-06-07 10:24:04       27 阅读
  4. IDM的优势

    2024-06-07 10:24:04       27 阅读
  5. docker错误

    2024-06-07 10:24:04       27 阅读
  6. golang通道(chan)选择(select)与关闭(close)使用示例

    2024-06-07 10:24:04       33 阅读
  7. vue3中作用域插槽

    2024-06-07 10:24:04       32 阅读
  8. Stable Diffusion:多领域应用的创新引擎

    2024-06-07 10:24:04       30 阅读
  9. npm发布自己的插件包

    2024-06-07 10:24:04       29 阅读
  10. 从零手写实现 nginx-09-compress http 文件压缩

    2024-06-07 10:24:04       24 阅读