Untitled

 avatar
unknown
plain_text
a year ago
1.8 kB
3
Indexable
bool transformationPossible(string a, string b){
        int count = 0;
        for(int i =0; i<a.size(); i++){
            if(a[i]!=b[i]) count++;
        }
        if(count==1) return true;
        else return false;
    }

    vector<vector<string>> findSequences(string startWord, string targetWord, vector<string>& wordList) {
        int V = wordList.size();
        int targetIndex = -1, startIndex=-1;
        for(int i =0; i<V; i++){
            if(wordList[i]==startWord)startIndex=i;
            if(wordList[i]==targetWord)targetIndex=i;
        }
        if(startIndex==-1){
            wordList.push_back(startWord);
            startIndex=V;
            V++;
        }
        vector<int> adj[V];
        for(int i =0; i<V; i++){
            for(int j = i+1; j<V; j++){
                if(transformationPossible(wordList[i], wordList[j])){
                    adj[i].push_back(j);
                    adj[j].push_back(i);
                };
            }
        }
        vector<int>dist(V, INT_MAX);
        vector<vector<string>>paths;
        queue<vector<int>>q;
        q.push({startIndex});
        while(!q.empty()){
            vector<int>path = q.front(); // We only want the last added element
            int u = path.back();
            q.pop();
            if(u==targetIndex) {
                vector<string>res;
                for(int i =0; i<path.size(); i++){
                    res.push_back(wordList[path[i]]);
                }
                paths.push_back(res);
            }
            for(int v: adj[u]){
                if(dist[v]>=dist[u]+1){
                    path.push_back(v);
                    q.push(path);
                    path.pop_back();
                    dist[v]=dist[u]+1;
                }
            }
        }
        return paths;
    }
Editor is loading...
Leave a Comment