Word Ladder II Solution | Simple BFS | C++
class Solution {
 public:
 vector<vector<string> > findLadders(string a, string      b, vector<string>& A) {
    unordered_set<string> s;
    int n=A.size();
    for(int i=0;i<n;i++){
        s.insert(A[i]);
    }
    vector<vector<string> > final_ans;
    queue<vector<string> > q;
    q.push({a});
    unordered_set<string> made;
    while(!q.empty()){
        n=q.size();
        int flag=0;
        unordered_set<string> made_temp;
        while(n--){
            vector<string> x=q.front();
            q.pop();
            string y=x.back();
            for(int i=0;i<y.size();i++){
                for(char j='a';j<='z';j++){
                    char z=y[i];
                    y[i]=j;
                    if(s.find(y)!=s.end() && made.find(y)==made.end()){
                        x.push_back(y);
                        if(y==b){
                            final_ans.push_back(x);
                            flag=1;
                        }
                        else q.push(x);
                        made_temp.insert(y);
                        x.pop_back();
                    }
                    y[i]=z;
                }
            }
        }
        if(flag==1) break;
        for(auto it:made_temp) made.insert(it);
		 }
		return final_ans;
	 }
 };
Comments (0)