这题广搜轻松解决
查看原帖
这题广搜轻松解决
1094030
yr409892525楼主2024/8/6 16:22

广搜代码

#include <bits/stdc++.h>
using namespace std;
string s1,s2;
int l1,l2;
struct code{
	int a,b;
	int step; 
};
queue<code> q;
code u;
bool v[2005][2005];
void work(int a,int b){
	if(v[a][b]==0){
		v[a][b]=1;
		q.push({a,b,u.step+1});
	}
}
int bfs(){
	q.push({1,1,0});
	v[1][1]=1;
	while(!q.empty()){
		u=q.front();
		q.pop();
		if(u.a>l1 && u.b>l2) return u.step;
		if(u.a<=l1){
			int aa=u.a+1,bb=u.b;
			while(s1[aa]==s2[bb]){
				aa++,bb++;
			}
			if(aa!=(u.a+1) && bb!=(u.b)){
				work(aa,bb);
			}
			work(u.a+1,u.b);
		}
		if(u.b<=l2){
			int aa=u.a,bb=u.b+1;
			while(s1[aa]==s2[bb]){
				aa++,bb++;
			}
			if(aa!=(u.a) && bb!=(u.b+1)){
				work(aa,bb);
			}
			work(u.a,u.b+1);
		}
		if(u.a<=l1 && u.b<=l2){
			int aa=u.a+1,bb=u.b+1;
			while(s1[aa]==s2[bb]){
				aa++,bb++;
			}
			if(aa!=(u.a+1) && bb!=(u.b+1)){
				work(aa,bb);
			}
			work(u.a+1,u.b+1);
		}
	}
	return 1e9;
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	cin>>s1>>s2;
	l1=s1.size();
	l2=s2.size();
	s1=" "+s1;
	s2=" "+s2;
	cout<<bfs()<<"\n";
	return 0;
}

AC记录

2024/8/6 16:22
加载中...