zoukankan      html  css  js  c++  java
  • 127. 单词接龙

    水题,spfa即可

    class Solution {
    public:
        vector<int> gra[5010];
        int d[5010], vis[5010];
    
        bool check(string str1, string str2)
        {
            int len1 = str1.length(), len2 = str2.length();
            if(len1 != len2) return false;
            int cnt = 0;
            for(int i = 0; i < len1; i++)
            {
                if(str1[i] != str2[i]) cnt++;
                if(cnt > 1) return false;
            }
            return true;
    
        }
    
    
        int spfa(int s, int t)
        {
            for(int i = 0; i < 5010; i++) d[i] = 0x7fffffff;
            memset(vis, 0, sizeof(vis));
            queue<int> Q;
            Q.push(s);
            vis[s] = 1;
            d[s] = 0;
            while(!Q.empty())
            {
                
                int u = Q.front(); Q.pop();
                vis[u] = 0;
                int len = gra[u].size();
                for(int i = 0; i < len; i++)
                {
                    int v = gra[u][i];
                    if(d[v] > d[u] + 1)
                    {
                        d[v] = d[u] + 1;
                        if(!vis[v])
                        {
                            Q.push(v);
                            vis[v] = 1;
                        }
                    }
    
                }
    
    
            }
            if(d[t] == 0x7fffffff) return 0;
            return d[t] + 1;
        }
    
    
        int ladderLength(string beginWord, string endWord, vector<string>& wordList) {
            int n = wordList.size();
            int s = 0, t = 0;
            for(int i = 0; i < n; i++)
            {
                if(wordList[i] == beginWord) s = i + 1;
                if(wordList[i] == endWord) t = i + 1;
            }
            if(s == 0)
            {
                s = n + 1;
                wordList.push_back(beginWord);
                n = wordList.size();
            }
    
    
            for(int i = 0; i < n; i++)
            {
                for(int j = i + 1; j < n; j++)
                {
                    if(check(wordList[i], wordList[j]))
                    {
                        gra[i + 1].push_back(j + 1);
                        gra[j + 1].push_back(i + 1);
    
                    }
    
                }
            }
            return spfa(s, t);
    
    
        }
    };
  • 相关阅读:
    数列(矩阵乘法+快速幂)
    最大公约数和最小公倍数问题
    解的个数(扩展欧几里得解不定方程)
    冒泡排序图(最长上升子序列变式)
    tomcat结合nginx使用小结
    ant构建web项目build脚本
    git分支合并到master
    oracle 存储过程,存储函数以及定时器的综合使用
    JPA 注解
    log4j简单应用
  • 原文地址:https://www.cnblogs.com/WTSRUVF/p/15546380.html
Copyright © 2011-2022 走看看