LeetCode752-打开轮盘锁

BFS
unordered_set:      insert   find     begin  end
queue   :      push   pop    front   last
 
 
 
 
 
 
class Solution {
public:
    string plusone(string str,int i){
        if(str[i]=='9'){
            str[i]='0';
        }
        else{
            str[i]=str[i]+1;
        }
        return str;
    }
    string downone(string str,int i){
        if(str[i]=='0'){
            str[i]='9';
        }
        else{
            str[i]=str[i]-1;
        }
        return str;
    }

 

    int openLock(vector<string>& deadends, string target) {
        unordered_set<string> deadset(deadends.begin(),deadends.end());
        queue<string> q;
        q.push("0000");
        unordered_set<string> visited;
        visited.insert("0000");
        int step=0;
        while(!q.empty()){
            int size=q.size();
            for(int i=0;i<size;i++){
                string str=q.front();
                q.pop();
                if(deadset.find(str)!=deadset.end()){
                    continue;
                }
                if(str==target){
                    return step;
                }
                for(int j=0;j<4;j++){
                    string up=plusone(str,j);
                    if(!visited.count(up)){
                        q.push(up);
                        visited.insert(up);
                    }
                    string down=downone(str,j);
                    if(!visited.count(down)){
                        q.push(down);
                        visited.insert(down);
                    }
                }
            }
            step++;
        }
        return -1;
    }
};
/*
http://www.cplusplus.com/reference/unordered_set/unordered_set/
*/
posted @ 2020-09-27 23:57  YITTT  阅读(97)  评论(0)    收藏  举报