NOIP里的恶心题(如果不用stl的话)
然而——stl的话
就成模拟了(本来不是么……)
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string>
#include <queue>
#include <map>
using namespace std;
const int MAXN = 6 + 5;
struct zt
{
string s;
int step;
};
map <string,bool> use;
string _[MAXN][2];
string k;
int n;
queue <zt> q;
int bfs(string s)
{
q.push((zt){s,0});
while(!q.empty())
{
zt u = q.front();
q.pop();
if(u.s == k)
return u.step;
int l = u.s.length();
for(int i = 0;i < l;i ++)
{
for(int j = 1;j <= n;j ++)
{
zt v = u;
if(!u.s.compare(i,_[j][0].length(),_[j][0]))
{
v.s.replace(i,_[j][0].length(),_[j][1]);
v.step++;
if(use[v.s])
continue;
if(v.step <= 10)
q.push(v);
use[v.s] = true;
}
}
}
}
puts("NO ANSWER!");
exit(0);
return 0;
}
string s;
int main()
{
n = 1;
cin >> s >> k;
while(cin >> _[n][0] >> _[n][1])
n ++;
printf("%d\n",bfs(s));
return 0;
}