rt。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<queue>
#include<map>
using namespace std;
#define maxn 10
#define MAXN 30
#define ll long long
string A,B,x[maxn],y[maxn];
struct node{
string s;
int foot;
}a[MAXN];
queue<node> Q;
map<string,int> vis;
int main(){
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>A>>B;
int n=0,ans=0;
while (cin>>x[n]>>y[n]) n++;
Q.push((node){A,0});
node u;
while (!Q.empty()){
u=Q.front();
string us=u.s;
int ufoot=u.foot;
Q.pop();
if (us==B){
ans=ufoot;
break;
}
for (int i=0;i<n;i++)
if (int(us.find(x[i]))!=-1 && vis[us]==0){
//下面的作用就是把us的x[i]的部分替换成y[i];
int k=int(us.find(x[i]));
us.erase(k,k+x[i].length());
us.insert(k,y[i]);
Q.push((node){us,ufoot+1});
vis[us]=1;
}
}
if (ans>10 || ans==0) cout<<"NO ANSWER!"<<endl;
else cout<<ans<<endl;
return 0;
}
就完全懵了,因为在中间调试的时候,ufoot 的值一开始是 0,后来全部是 1……