广搜求助
  • 板块学术版
  • 楼主B1ade_
  • 当前回复16
  • 已保存回复16
  • 发布时间2021/7/12 10:15
  • 上次更新2023/11/4 15:02:23
查看原帖
广搜求助
158878
B1ade_楼主2021/7/12 10:15

题目传送门

死亡记录

#include<bits/stdc++.h>
using namespace std;
string a,b,ca[7],cb[7];
map<string,bool>f;
queue<string>q;
queue<int>ans;
int n=6;
int main()
{
	cin>>a>>b;for (int i=1;i<=6;++i) cin>>ca[i]>>cb[i];
	while (ca[n][0]=='\0') --n;
	if (a==b)
	{
		cout<<0;return 0;
	}
	if (n==0)
	{
		cout<<"NO ANSWER";return 0;
	}
	q.push(a);
	ans.push(0);
	while (q.size()&&q.front()!=b&&ans.front()<=10)
	{
		string front=q.front();q.pop();
		if (f[front])
		{
			ans.pop();continue;
		}
		f[front]=1;
		for (int i=1;i<=n;++i)
		{
			while (1)
			{
				int m=front.find(ca[i]);
				if (m==-1) break;
				string ss;ss=front;
				ss.replace(m,ca[i].size(),cb[i]);
				q.push(ss);
				ans.push(ans.front()+1);
				front[m]='^';
				cout<<front<<endl;
			}
		}
		ans.pop();
	}
	if (ans.front()>10)
	{
		cout<<"NO ANSWER";return 0;
	}
	cout<<ans.front();
	return 0;
}```cpp
2021/7/12 10:15
加载中...