bfs+字符串变换
就嗯搜
注意a,b两个字符串的长度
上代码
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<vector>
#include<queue>
#include<map>
using namespace std;
using ll=long long;
string a[100],b[100];
string st,ed;
struct node{
string str;
int step;
}s,t;
queue<node>q;
int ct =0;
void bfs(){
s.str=st;
s.step=0;
q.push(s);
while(q.size()){
t=q.front();
q.pop();
if(t.step>10){
cout<<"NO ANSWER!";
return ;
}
for(int i=0;i<ct;i++){
int pos=0;
pos=t.str.find(a[i]);
while(pos!=-1){
s.str=t.str;
s.step=t.step+1;
if(b[i].size()<=a[i].size())s.str.replace(pos,a[i].size(),b[i]);
else s.str=s.str.replace(pos,b[i].size(),b[i]);
if(s.str==ed){
cout<<s.step;
return;
}
q.push(s);
pos=s.str.find(a[i],pos+1);
}
}
}
cout<<"NO ANSWER!";
}
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>st>>ed;
while(cin>>a[ct]>>b[ct]){
ct++;
}
bfs();
return 0;
}