1. 程式人生 > >Leetcode 127. 單詞接龍

Leetcode 127. 單詞接龍

begin 互轉 con nod rap clas tco pair ()

class Solution {
public:
    //兩個字符串是否可以相互轉換
    bool connect(const string &word1, const string &word2)
    {
        int cnt = 0;
        for(int i=0; i<word1.size(); ++i)
        {
            if(word1[i]!=word2[i])
                cnt++;
        }
        return cnt == 1;
    }
    //構建連通圖
    void
construct_graph(string & beginWord, vector<string> &wordList, map<string, vector<string>> & graph) { wordList.push_back(beginWord); //構建一個空圖 for(int i=0; i<wordList.size(); ++i) { graph[wordList[i]] = vector<string>(); }
for(int i=0; i<wordList.size(); ++i) { for(int j=i+1; j<wordList.size(); ++j) { if(connect(wordList[i], wordList[j])) { graph[wordList[i]].push_back(wordList[j]); graph[wordList[j]].push_back(wordList[i]); } } } }
int BFS_graph(string& beginWord, string &endWord, map<string, vector<string>> & graph) { queue<pair<string, int >> q; //搜索隊列 set<string> visit; //標記是否訪問過了 q.push(make_pair(beginWord,1)); visit.insert(beginWord); while(!q.empty()) { string node = q.front().first; int step = q.front().second; q.pop(); if(node == endWord) return step; vector<string> &neighbors = graph[node]; for(int i=0; i<neighbors.size(); ++i) { if(visit.find(neighbors[i]) == visit.end()) { q.push(make_pair(neighbors[i], step+1)); visit.insert(neighbors[i]); } } } return 0; } int ladderLength(string beginWord, string endWord, vector<string>& wordList) { map<string, vector<string>> graph; construct_graph(beginWord, wordList, graph); return BFS_graph(beginWord, endWord, graph); } };

Leetcode 127. 單詞接龍