求助!20分,只过了一个点
查看原帖
求助!20分,只过了一个点
363491
U_92_Uranium楼主2022/1/17 20:32
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cstdlib>
#include <cctype>
#include <cmath>
#include <algorithm>
#include <stack>
#include <queue>
#include <utility>
#include <map>
#include <set>
#include <list>
#include <vector>
using namespace std;
const int maxn=7,Inf=0x3f3f3f3f;
string A,B,t;
string A_rule[maxn],B_rule[maxn];
int cnt=-1,iMin=Inf;//第一次getline()读入的是无用的'\n',存到++cnt 即下标0,真正的rule从1开始
void DFS(int step,string s)
{
	if(step>10) {
		return ;
	}
	if(s==B) {
		iMin=min(iMin,step-1);
	}
	for(int i=1; i<=cnt; ++i) {
		int pos=s.find(A_rule[i]);
		if(pos!=-1) {
			s.replace(pos,A_rule[i].size(),B_rule[i]);
			DFS(step+1,s);
			s.replace(pos,B_rule[i].size(),A_rule[i]);
		}
	}
	return;
}


int main()
{
	cin>>A>>B;
	while(getline(cin,t)) {
		++cnt;
		int pos=t.find(" ");
		A_rule[cnt]=t.substr(0,pos);
		B_rule[cnt]=t.substr(pos+1);
	}

//	for(int i=1; i<=cnt; ++i) {
//		cout<<A_rule[i]<<" "<<B_rule[i]<<endl;
//	}

	DFS(1,A);

	if(iMin==Inf) {
		printf("NO ANSWER!");
	} else {
		printf("%d",iMin);
	}

	return 0;
}

2022/1/17 20:32
加载中...