第五个点WA,求助
查看原帖
第五个点WA,求助
178128
杨凯楼主2020/9/27 16:42
#include<bits/stdc++.h>
using namespace std;
string st1,fi1;
string rule[10][2];
char c;
int s;
struct sn
{
   string str;
   int n;	
};
queue<sn>q; 
map<string,int>m;
bool containIt(struct sn s0,string s1)
{
	 string::size_type idx;
	 string ss1=s0.str;
	 idx=ss1.find(s1);
	 if(idx!=string::npos)return true;
	 return false; 
}
void update(struct sn &s0,string s2,string s1)
{
	string ss1=s0.str;
	ss1.replace(ss1.find(s2),s2.length(),s1);
	s0.str=ss1;
	s0.n++;
	return ;
}
int main()
{
	cin>>st1>>fi1;
//	cout<<st1<<" "<<fi1<<endl;
	if(st1==fi1)
	{
		cout<<0;
		return 0;
	}
//	for(int i=1;i<7;i++)
//	{
////	   c='a';
//	   s++;
//	   cin>>rule[i][0]>>rule[i][1];	
// 	   if((c=getchar())==' ')break;
//	}
    while(cin>>rule[s][0]>>rule[s][1])s++;
//    s=3;
//	for(int i=0;i<3;i++ )cin>>rule[i][0]>>rule[i][1];
//    cout<<s<<endl;
	sn sn1;
	sn1.n=0;
	sn1.str=st1;
	q.push(sn1);
	while(!q.empty())
	{
		sn ss,ss0;
		ss=q.front();
		ss0=ss;
		if(ss.n==10)
		{
			cout<<"NO ANSWER!";
			return 0;
		}
		q.pop();
		for(int i=0;i<s;i++)
		{
			ss=ss0;
			if(containIt(ss,rule[i][0]))
			{
//				cout<<ss.str<<endl;
				update(ss,rule[i][0],rule[i][1]);
//				cout<<ss.str<<endl;
				if(ss.str==fi1)
				{
					cout<<ss.n;
					return 0;
				}
				if(m.count(ss.str))continue;
				else m[ss.str]=ss.n;
				q.push(ss);
			}
		}
	}
	cout<<"NO ANSWER!";
	return 0;
} 
2020/9/27 16:42
加载中...