IDDFS
做这个题感受到了STL的强大233
注意同一个字符串可能有多处符合变换规则,所以对于同一个变换规则,搜完一处后要继续搜
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
string A,B,A1[7],B1[7];
int k,n=1;
bool ok=0;
bool DFS(int deep){
if(ok)return 1;
if(A==B){
ok=1;
return 1;
}
if(deep>k)return 0;
int begin=0;
for(int i=1;i<n;i++){
while(1){
begin=A.find(A1[i],begin);
if(begin!=string::npos){
A.replace(begin,A1[i].size(),B1[i]);
DFS(deep+1);
if(ok)return 1;
A.replace(begin,B1[i].size(),A1[i]);
begin+=A1[i].size();
}
else break;
}
begin=0;
}
return 0;
}
void init(){
cin>>A>>B;
while(cin>>A1[n]>>B1[n])n++;
}
void solve(){
for(k=1;k<=10;k++){
if(DFS(1)){
cout<<k;
return;
}
}
cout<<"NO ANSWER!";
}
int main(){
ios::sync_with_stdio(false);
init();
solve();
return 0;
}