请问这样写哪里有问题?
  • 板块题目总版
  • 楼主bbitra
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/7/23 16:22
  • 上次更新2023/10/27 18:45:50
查看原帖
请问这样写哪里有问题?
515119
bbitra楼主2022/7/23 16:22
题目描述 Description
给出n个不同的,由两个英文字母组成的字母对。每个字母对不区分字母顺序。现在要构造一个字符串,使得每个字母对都在字符串中出现且只出现一次。

输入描述 Input Description
第一行,一个整数n
接下来n行,每行两个字母,ab,表示a和b需要在构造出的字符串中相邻

输出描述 Output Description
字典序最小的答案。如果无法构成,输出“No Solution”

样例输入 Sample Input
4
aZ
tZ
Xt
aX
样例输出 Sample Output
XaZtX

我发现我的代码是输入问题,但不知道哪里错了啦?

求助

我的代码

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int n, m, g[1025][1025], st=1;
int du[1025], ans[2049], cnt;
void dfs(int x)
{
	for(int i=1; i<=n; i++)
		if(g[x][i])
		{
			g[x][i]--,g[i][x]--;
			dfs(i);
		}
	ans[++cnt]=x;
}
int main()
{
	n=0;
	cin >> m;
	for(int i=1; i<=m; i++)
	{
		char a, b;
		cin >>a>>b;
		int u=(int)(a), v=(int)(b);
		g[u][v]++, g[v][u]++;
		du[u]++;
		du[v]++;
	}
	n=(int)('z');
	st=(int)('A');
	for(int i=(int)('A'); i<=n; i++)
		if(du[i]%2==1)
		{
			st=i;
			break;
		}
	int shu=0;
	for(int i=(int)('A'); i<=n; i++)
		if(du[i]%2==0)
			shu++;
	if(shu>2)
	{
		cout <<"No Solution";
		return 0;
	 } 
	dfs(st);
	for(int i=cnt; i>=1; i--)
		cout << ans[i] << '\n';
	return 0;
}
2022/7/23 16:22
加载中...