#include<bits/stdc++.h>
using namespace std;
int p2,p1,ans,i=0;
string aim,st;
queue<string> q;
pair<string,string> m[7];
map<string,int> mat;
void ch(int num){
int pos=0;
string xx;
xx=q.front();
while(xx.find(m[num].first,pos)!=string::npos){
xx=q.front();
xx.replace(xx.find(m[num].first,pos),m[num].first.length(),m[num].second);
pos=xx.find(m[num].first,pos)+m[num].first.length();
if(!mat.count(xx)){
q.push(xx);
mat[xx]=mat[q.front()]+1;
if(mat[xx]>10){
ans=1;
}
}
}
return;
}
void bfs(){
while(!q.empty()&&ans==0){
for(int j=0;j<i;j++){
ch(j);
}
q.pop();
if(mat.count(aim)){
return;
}
}
}
int main(){
cin>>st>>aim;
mat[st]=0;
while(cin>>m[i].first>>m[i].second){
i++;
}
q.push(st);
bfs();
if(ans==1||mat[aim]==0){
cout<<"NO ANSWER!";
}
else{
cout<<mat[aim];
}
return 0;
}
我认为我的代码在这里饿了
void ch(int num){
int pos=0;
string xx;
xx=q.front();
while(xx.find(m[num].first,pos)!=string::npos){
xx=q.front();
xx.replace(xx.find(m[num].first,pos),m[num].first.length(),m[num].second);
pos=xx.find(m[num].first,pos)+m[num].first.length();
if(!mat.count(xx)){
q.push(xx);
mat[xx]=mat[q.front()]+1;
if(mat[xx]>10){
ans=1;
}
}
}
return;
}
感觉我要搞双向bfs了,或者再剪枝