求救:饿了,来点2个(#4#5)特了饿(TLE)
查看原帖
求救:饿了,来点2个(#4#5)特了饿(TLE)
1473064
pusx_loading楼主2025/2/6 20:36
#include<bits/stdc++.h>
using namespace std;

int p2,p1,ans,i=0;
string aim,st;
queue<string> q;
pair<string,string> m[7];
map<string,int> mat;

void ch(int num){
	int pos=0;
	string xx;
	xx=q.front();
	while(xx.find(m[num].first,pos)!=string::npos){
		xx=q.front();
		xx.replace(xx.find(m[num].first,pos),m[num].first.length(),m[num].second);
		pos=xx.find(m[num].first,pos)+m[num].first.length();
		if(!mat.count(xx)){
			q.push(xx);
			mat[xx]=mat[q.front()]+1;
			if(mat[xx]>10){
				ans=1;
			}
		}
	}
	return;
}

void bfs(){
	while(!q.empty()&&ans==0){
		for(int j=0;j<i;j++){
			ch(j);
		}
		q.pop();
		if(mat.count(aim)){
			return;
		}	
	}
}

int main(){
	cin>>st>>aim;
	mat[st]=0;
	while(cin>>m[i].first>>m[i].second){
		i++; 
	}
	q.push(st);
	bfs();
	if(ans==1||mat[aim]==0){
		cout<<"NO ANSWER!";
	}
	else{
		cout<<mat[aim];
	}
	return 0;
}

我认为我的代码在这里饿了

void ch(int num){
	int pos=0;
	string xx;
	xx=q.front();
	while(xx.find(m[num].first,pos)!=string::npos){
		xx=q.front();
		xx.replace(xx.find(m[num].first,pos),m[num].first.length(),m[num].second);
		pos=xx.find(m[num].first,pos)+m[num].first.length();
		if(!mat.count(xx)){
			q.push(xx);
			mat[xx]=mat[q.front()]+1;
			if(mat[xx]>10){
				ans=1;
			}
		}
	}
	return;
}

感觉我要搞双向bfs了,或者再剪枝

2025/2/6 20:36
加载中...