40pts求助
查看原帖
40pts求助
1059474
zzx0203楼主2024/8/30 18:28
#include<bits/stdc++.h>
using namespace std;
struct jk{
	char x,y;
}a[20];
string n;
int k;
string ans="0";
bool vis[20];
string sum[100005];
queue<int>q;
string jf(string a,string b){
	string c="";
	int lena=a.size();
	int lenb=b.size();
	if(lena<lenb){
		swap(a,b);
		swap(lena,lenb);
	}
	for(int i=1;i<=lena-lenb;i++){
		b='0'+b;
	}
	int jw=0;
	for(int i=lena-1;i>=0;i--){
		int ans=0;
		ans=a[i]-'0'+b[i]-'0'+jw;
		jw=ans/10;
		c=char(ans%10+'0')+c;
	}
	if(jw){
		c=char(jw+'0')+c;
	}
	return c;
}
void dfs(string op){
	queue<int>q;
	int m=stoi(ans);
	for(int i=1;i<=m;i++){
		if(op==sum[i]){
			return ;
		}
	}
	ans=jf(ans,"1");
	sum[stoi(ans)]=op;
	for(int i=1;i<=k;i++){
		if(!vis[i]){
			for(int j=0;j<op.size();j++){
				if(op[j]==a[i].x){
					op[j]=a[i].y;
					dfs(op);
					op[j]=a[i].x;
				}
			}
		}
	}
	return ;
}
int main(){ 
	cin>>n>>k;
	for(int i=1;i<=k;i++){
		cin>>a[i].x>>a[i].y;
	}
	dfs(n);
	cout<<ans;
	return 0;
}

3#4#5#T

dfs做法

2024/8/30 18:28
加载中...