problem
solution
codes
#include<iostream>
#include<queue>
#include<string>
#include<map>
using namespace std;
int n = 1, flag;
string a, b, ai[1010], bi[1010];
queue<string>q;
map<string, int>ma;
int main(){
cin>>a>>b;
while(cin>>ai[n]>>bi[n])n++;
q.push(a);
ma[a] = 0;
while(q.size()){
string t = q.front(); q.pop();
if(t == b){ flag = 1; break; }
if(ma[t]>10)break;
for(int j = 0; j < t.size(); j++){
string nt = t.substr(j);
for(int i = 1; i < n; i++){
int tt = nt.find(ai[i]);
if(tt == string::npos)continue;
tt += j;
string ttt = t.substr(0,tt)+bi[i]+t.substr(tt+ai[i].size());
if(!ma.count(ttt)){
ma[ttt] = ma[t]+1;
q.push(ttt);
}
}
}
}
if(flag)cout<<ma[b]<<"
";
else cout<<"NO ANSWER!
";
return 0;
}
#include<iostream>
#include<string>
#include<queue>
#include<set>
#define maxn 1010
using namespace std;
string ai[maxn],bi[maxn];
struct node{
string str;
int st;
node(string a, int b):str(a),st(b){}
};
set<string>s;
int ans;
int main(){
string a, b;
cin>>a>>b;
int n = 1;
while(cin>>ai[n]>>bi[n])n++;
queue<node>q;
q.push(node(a,0));
while(q.size()){
node t = q.front(); q.pop();
if(t.str == b){ ans = t.st; break;}
if(t.st > 10){ ans = 20; break; }
for(int j = 0; j < t.str.size(); j++){
string nt = t.str.substr(j);
for(int i = 1; i < n; i++){
int tt = nt.find(ai[i]);
if(tt==string::npos)continue;
tt += j;
string ttt = t.str.substr(0,tt)+bi[i]+t.str.substr(tt+ai[i].size());
if(!s.count(ttt)){
q.push(node(ttt,t.st+1));
s.insert(ttt);
}
}
}
}
if(ans == 20 || ans == 0)cout<<"NO ANSWER!
";
else cout<<ans<<"
";
return 0;
}