题目描述 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;
}