50分求助
查看原帖
50分求助
82417
blackfrog楼主2021/7/3 09:15

求求大佬来帮我看下代码

#include<iostream>
using namespace std;

bool map[500][500];
long long n;

long long ap[500];
long long fa[500];
long long fi;
long long cnt;
char st[500];
bool fin;
long long find(long long x){
	if(fa[x]!=x)fa[x] = find(fa[x]);
	return fa[x];
}

void dfs(long long j,long long cur){
	bool all = 1;
	for(long long i = 'A';i<='z';i++){
		if(map[j][i] == 1){
			all = 0;
			map[j][i] = 0;
			map[i][j] = 0;
			st[cur] = char(j);
			dfs(i,cur+1);
			//map[j][i] = 1;
			//map[i][j] = 1;
		}
	}
	st[cur] = j;
	/*if(cur>n&&all == 1&&!fin){
		for(long long i = 1;i<cur;i++){
			cout<<st[i];
		}
		cout<<char(j)<<endl;
		fin = 1;
	}*/
}

int main(){
	cin>>n;
	for(long long i = 1;i<200;i++){
		fa[i] = i;
	}
	for(long long i = 0;i<n;i++){
		char a,b;
		cin>>a>>b;
		map[a][b] = 1;
		map[b][a] = 1;
		ap[a]++;
		ap[b]++;
		fa[find(a)] = find(b);
	}
	for(long long i = 1;i<200;i++){
		if(fi == 0&&ap[i] != 0){
			fi = find(i);
		}
		if(ap[i]!=0&&fi!=0&&fi != find(i)){
			cout<<"No Solution"<<endl;
			return 0;
		}
		if(ap[i]%2 == 1){
			cnt++;
		}
	}
	if(cnt>2){
		cout<<"No Solution"<<endl;
		return 0;
	}
	for(long long i =1;i<200;i++){
		if(ap[i]%2==1&&ap[i]!=0){
			dfs(i,1);
			for(long long i = 1;i<=n+1;i++){
				cout<<st[i];
			}
			return 0;
		}
	}
	for(long long i =1;i<200;i++){
		if(ap[i]!=0){
			dfs(i,1);
			for(long long i = 1;i<=n+1;i++){
				cout<<st[i];
			}
			return 0;
		}
	}
	cout<<"No Solution"<<endl;
	return 0;
} 
2021/7/3 09:15
加载中...