双向BFS,最后两个WA。求助!
查看原帖
双向BFS,最后两个WA。求助!
273640
ZeePing楼主2024/10/30 12:34
//最后两个点WA
#include<bits/stdc++.h>
using namespace std;
string A,B;
string ch1[10],ch2[10]; //存储变化规则 
map<string,int>mm1,mm2;
int len;
struct node{
	node(){}
	node(string s1,int step1){
		str=s1;
		step=step1;
	}
	string str;
	int step;
};
queue<node>q1,q2;
int dbfs(){
	while(!q1.empty() && !q2.empty()){
		//cout<<q1.size()<<" "<<q2.size()<<endl; 
		node cur,nex;
		//正向搜索 
		if(!q1.empty()){
			cur = q1.front();
			//cout<<"正向cur.str : "<<cur.str<<endl;
			if(mm2[cur.str])  //当前字符串已在逆向中存在 
				return cur.step+mm2[cur.str];
			for(int i=0;i<len;i++){ //len种变化规则
				nex=cur; 
				string r1 = ch1[i];
				string r2 = ch2[i];
				//cout<<"r1: "<<r1<<" r2: "<<r2<<endl;
				//将r1变为r2,先判断r1是否是当前字符串的子串
				if(nex.str.find(r1)!=-1){
					nex.str.replace(nex.str.find(r1),r1.size(),r2);
					nex.step=cur.step+1;
					//cout<<"正向nex.str : "<<nex.str<<"正向nex.step : "<<nex.step<<endl;
					if(mm2[nex.str])
						return nex.step+mm2[nex.str];
					if(!mm1[nex.str]){ //在正向中还不存在 
						q1.push(nex);
						mm1[nex.str]=nex.step;
					}
				}
				
			}
		}
		q1.pop();
		
		//开始逆向搜索 
		if(!q2.empty()){
			cur = q2.front();
			//cout<<"逆向cur.str : "<<cur.str<<endl; 
			if(mm1[cur.str])  //当前字符串已在逆向中存在 
				return cur.step+mm1[cur.str];
			
			for(int i=0;i<len;i++){ //len种变化规则 
				nex=cur;
				string r1 = ch2[i];
				string r2 = ch1[i];
				//cout<<"r1: "<<r1<<" r2: "<<r2<<endl;
				//将r1变为r2,先判断r1是否是当前字符串的子串
				if(nex.str.find(r1)!=-1){
					nex.str.replace(nex.str.find(r1),r1.size(),r2);
					nex.step=cur.step+1;
				//	cout<<"逆向nex.str : "<<nex.str<<"逆向nex.step : "<<nex.step<<endl;
					if(mm1[nex.str])
						return nex.step+mm1[nex.str];
					if(!mm2[nex.str]){ //在正向中还不存在 
						q2.push(nex);
						mm2[nex.str]=nex.step;
					}
				}
				
			}
		}
		q2.pop();
	}	
	return 11;
}

int main(){
	cin>>A>>B;
	while(cin>>ch1[len]>>ch2[len]){
		len++;
	}
	q1.push(node(A,0));
	q2.push(node(B,0));
	mm1[A]=1;
	mm2[B]=1;
	int k = dbfs(); 
	if(k>10)
		cout<<"NO ANSWER!";
	else
		cout<<k;
	return 0;
}
2024/10/30 12:34
加载中...