BFS40分求助
查看原帖
BFS40分求助
663195
Z_AuTwT楼主2024/1/27 15:04
#include<bits/stdc++.h>
using namespace std;
map <string,int> mp;
string s1;
void bfs(){
    queue<pair<string,int> > que;
    que.push(make_pair(s1,1));
    while(!que.empty()){
        pair<string,int> dt=que.front();
        que.pop();
        if(mp[dt.first]==0){
            mp[dt.first]=dt.second;
        }else{
            if(dt.second>=mp[dt.first]) continue;
            else mp[dt.first]=dt.second;
        }
        dt.second++;
        for(int i=0;i<dt.first.size();i++){
            for(int j=0;j<dt.first.size();j++){
                if(i==j) continue;
                string x=dt.first;
                x[i]=dt.first[j];
                x[j]=dt.first[i];
                que.push(make_pair(x,dt.second));
            }
        }
        for(int i=0;i<dt.first.size();i++){
            string x=dt.first.substr(0,i);
            if(i!=dt.first.size()-1) x+=dt.first.substr(i+1);
            que.push(make_pair(x,dt.second));
        }
        for(int i=1;i<dt.first.size();i++){
            string x=dt.first;
            if(x.size()<s1.size()){
                for(char v=dt.first[i-1]+1;v<=dt.first[i]-1;v++){
                    string dt2=x.substr(0,i),dt1=x.substr(i);
                    x=dt2+v+dt1;
                    que.push(make_pair(x,dt.second));
                    x=dt.first;
                }
            }
        }
    }
}
int main(){
    cin>>s1;
    int t;
    cin>>t;
    while(t--){
        string v;
        cin>>v;
        mp.clear();
        bfs();
        cout<<(mp[v]==0?-1:mp[v]-1)<<"\n";
    }
}
2024/1/27 15:04
加载中...