双向搜索,蒟蒻求调
查看原帖
双向搜索,蒟蒻求调
750535
Trubiacy_楼主2024/7/22 14:23

rt 样例没过,没看出来错哪了

#include <bits/stdc++.h>
#define int long long
#define str first
#define dep second
#define endl '\n'
#define MAXN 0x3f3f3f3f3f3f3f3f
#define MINN -0x3f3f3f3f3f3f3f3f
#define Trubiacy ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
using namespace std;

typedef pair<string,int> pii;
const int N=29;
int n;
string a,b,s1[N],s2[N];
map<string,bool> h1,h2;
queue<pii> q1,q2;


int bfs(){
    h2[b]=1;
    q1.push({a,0});q2.push({b,1});
    while(q1.size()&&q2.size()){
        pii tmp1=q1.front();q1.pop();
        string str1=tmp1.str;
        int dep1=tmp1.dep;
        if(dep1>10) return -1;
        for(int i=1;i<=n;i++){
            if(s1[i].size()>str1.size()) continue;
            for(int j=0;j<=str1.size()-s1[i].size();j++){
                string to=s1[i];
                if(str1.substr(j,s1[i].size())!=to) continue;
                string now=str1.substr(0,j);
                now+=s2[i];now+=str1.substr(j+s2[i].size());
                if(h1[now]) continue;
                if(h2[now]) return dep1+h2[now];
                q1.push({now,dep1+1});
                h1[now]=dep1+1;
            }
        }

        pii tmp2=q2.front();q2.pop();
        string str2=tmp2.str;
        int dep2=tmp2.dep;
        if(dep2>10) return -1;
        for(int i=1;i<=n;i++){
            if(s2[i].size()>str2.size()) continue;
            for(int j=0;j<=str2.size()-s2[i].size();j++){
                string to=s2[i];
                if(str2.substr(j,s2[i].size())!=to) continue;
                string now=str2.substr(0,j);
                now+=s1[i];now+=str2.substr(j+s1[i].size());
                if(h2[now]) continue;
                if(h1[now]) return dep2+h1[now];
                q2.push({now,dep2+1});
                h2[now]=dep2+1;
            }
        }
    }
    return -1;
}

signed main(){
    Trubiacy;
    int Tracy=1;
    // int Tracy; cin>>Tracy;
    while(Tracy--){
        cin>>a>>b;
        while(cin>>s1[++n]>>s2[n]);
        int ans=bfs();
        if(ans==-1) cout<<"NO ANSWER!";
        else cout<<ans-1;
    }
    return 0;
}
2024/7/22 14:23
加载中...