数据点死循环求助
查看原帖
数据点死循环求助
414652
Qingshi楼主2021/1/30 20:26

求巨佬帮帮找找bug

找了半天找不出来bug在哪 QwQ

Test Input:

21
BADCEFGHIJKLMNOPQRSTU
BADCEFGHIJKLMNOPQRSTU
BDEGIKMOQTBDEGIKMOQST

代码如下:

#include <bits/stdc++.h>
using namespace std;
char s1[30],s2[30],s3[30];
bool rec=false;
int n,num[30];
int a[30],b[30],c[30];
bool z[30];
bool cut(){
	if(rec)return true;
	if(num[a[0]]+num[b[0]]>=n)return true;
	for(int i=n-1;i>=0;i--){
		int A=num[a[i]],B=num[b[i]],C=num[c[i]];
		if(A==-1||B==-1||C==-1)continue;
		if((A+B)%n!=C&&(A+B+1)%n!=C)return true;
	}
	return false;
} 
bool check(){
	int m=0;
	for(int i=n-1;i>=0;i--){
		int A=num[a[i]],B=num[b[i]],C=num[c[i]];
		if((A+B+m)%n!=C)return false;
		if(A+B+m>=n)m=1;
		else m=0;
	}
	rec=true;
	return true;
}
void print(){
	for(int i=0;i<n;i++){
		cout<<num[i]<<" ";
	}
	return;
}
void dfs(int x){
	if(cut())return;
	if(x<0){
		if(check()){
			print();
		}
		return;
	}
	if(num[a[x]]==-1){
		for(int i=n-1;i>=0;i--){
			if(z[i])continue;
			num[a[x]]=i;
			z[i]=true;
			dfs(x);
			z[i]=false;
			num[a[x]]=-1;
		} 
	}
	if(num[b[x]]==-1){
		for(int i=0;i<n;i++){
			if(z[i])continue;
			num[b[x]]=i;
			z[i]=true;
			dfs(x);
			z[i]=false;
			num[b[x]]=-1;
		} 
	}
	if(num[c[x]]==-1){
		for(int i=0;i<n;i++){
			if(z[i])continue;
			num[c[x]]=i;
			z[i]=true;
			dfs(x);
			z[i]=false;
			num[c[x]]=-1;
		} 
	}
	dfs(x-1);
}
int main(){
	cin>>n;
	cin>>s1;cin>>s2;cin>>s3;
	for(int i=0;i<n;i++){
		z[i]=false;
		num[i]=-1;
		a[i]=s1[i]-'A';
		b[i]=s2[i]-'A';
		c[i]=s3[i]-'A';
	}
	dfs(n-1);
	return 0;
}
2021/1/30 20:26
加载中...