很好的bfs的题,实现写的比较麻烦,但感觉不错,思路很清晰,适合考试。
#include <bits/stdc++.h>
using namespace std;
int cnt=1;
bool flag=0;
string a, b;
string d[10][2];
struct node{
string a;
int step;
};
queue<node> q1;
map<string,bool> map1;
bool bfs(){
q1.push((node){a,0});
map1[a] = 1;
while(!q1.empty()){
node t1 = q1.front();
q1.pop();
if(t1.step > 10) return 0;
if(t1.a == b){printf("%d", t1.step);return 1;}
string t = t1.a;
int len = t.length();
string nxt;
for(int i = 1; i <= cnt; i ++){
int len1 = d[i][0].length();
for(int j = 0, k; j < len; j ++){
for(k = 0; k < len1; k ++)
if(t[j+k] != d[i][0][k]) break;
if(k == len1){
nxt.clear();
for(int p = 0; p < j; p ++) nxt.push_back(t[p]);
int len2 = d[i][1].length();
for(int p = 0; p < len2; p ++) nxt.push_back(d[i][1][p]);
for(int p = j+len1; p < len; p ++) nxt.push_back(t[p]);
if(!map1[nxt]) map1[nxt] = 1, q1.push((node){nxt, t1.step+1});
}
}
}
}
return 0;
}
int main(){
cin >> a >> b;
while(cin >> d[cnt][0] >> d[cnt][1]) cnt ++;
cnt --;
if(!bfs()) printf("NO ANSWER!\n");
return 0;
}