P1032求助
  • 板块题目总版
  • 楼主LLL789
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/4/14 08:53
  • 上次更新2024/4/14 09:02:17
查看原帖
P1032求助
633454
LLL789楼主2024/4/14 08:53

5个点都输出的NO ANSWER!。找不出错误在哪

#include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
#include<queue>
using namespace std;
const int INF=0x3f3f3f3f;
string A,B;
string r1[8],r2[8];
queue<string> q;//广搜队列 
map<string,int> M;
int main(){
	cin>>A>>B;
	int n;
	for(n=1;cin>>r1[n]>>r2[n];++n); --n;
	q.push(A);
	M[A]=0;
	if(A==B){
		printf("0");
		return 0;
	}
	while(!q.empty()){
		string u=q.front();
		q.pop();
		for(int i=1;i<=n;i++){//枚举变换规则 
			for(int j=0;j<u.length();j++){//枚举目标子串的起点 
				if(u.substr(j,r1[n].size()) == r1[n]){//找到子串 
					string v=u.substr(0,j)+r2[n]+u.substr(j+r2[n].size(),INF);
					if(!M.count(v)){//如果v没有出现过 
						M[v]=M[u]+1;
						if(v==B){
							printf("%d",M[v]);
							return 0;
						}
						if(M[v]<10){
							q.push(v); 
						}
					}
				}
			}
		}
	}
	printf("NO ANSWER!");
	return 0;
}
2024/4/14 08:53
加载中...