10分求助!
查看原帖
10分求助!
658786
STUDENT00楼主2022/11/4 21:51

代码很好理解得,迭代加深。

#include<bits/stdc++.h>
#define pc putchar
using namespace std;
int n,will[30],deep,ans1[100],ans2[100],ans3[100],st[4][30],cnt[30];
char str[30];
void dfs(int now){
	if(cnt[3]&&st[3][cnt[3]]!=will[cnt[3]]) return;
	if(deep-now<cnt[0]+cnt[1]+cnt[2]) return;
	if(now==deep&&cnt[3]==n){
		for(int i=0;i<now;i++) printf("%c %c %c\n",ans1[i],ans2[i]+65,ans3[i]+65); 
		exit(0);
	}
	if(now>=deep) return;
	for(int i=0;i<3;i++){
		if(!cnt[i]) continue;
		for(int j=i+1;j<4;j++){
			int t=st[i][cnt[i]--];
			ans1[now]=t;ans2[now]=i;ans3[now]=j;
			st[j][++cnt[j]]=t;
			dfs(now+1);
			cnt[j]--;
			st[i][++cnt[i]]=t;
		}
	}
}
int main(){
	scanf("%d%s",&n,str+1);
	for(int i=1;i<=n;i++) will[n-i+1]=str[i];
	for(int i=n;i>=1;i--) st[0][++cnt[0]]=str[i];
	for(deep=n;deep<=3*n;deep++) dfs(0);
	printf("NO");
	return 0;
}
2022/11/4 21:51
加载中...