#include<iostream>
#include<queue>
#include<algorithm>
#include<map>
using namespace std;
int main(){
    int n;
    cin>>n;
    string s;
    cin>>s;
    queue<string>q;//存储字符串
    queue<int>steps;//存储步数
    map<string,int>visited;//标记是否出现过
    
    q.push(s);
    steps.push(0);
    visited[s]=1;//原始字符串已经被访问过 
    while(!q.empty()){
        string now=q.front();
        q.pop();
        int step=steps.front();
        steps.pop();
        
        if(now.find("2012")!=-1){
            cout<<step<<endl;
            return 0;
        }
        for(int i=0;i<now.length();i++){
            string next=now;
            swap(next[i],next[i+1]);
            
            if(visited[next]==0){
                visited[next]=1;
                q.push(next);
                steps.push(step+1);
            }
        }
    }
    cout<<-1<<endl;
    return 0;
}

更多推荐