RT,我也不知道为什么会出现这种情况QAQ,求大佬帮忙调调,思路就是找开头字母然后直接dfs。
#include<cstdio>
#include<string>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int n;
bool f[1005];
string s[1005];
int b_st[26],b_ed[26],st,ed,ans[1005];
void dfs(int now,int num)
{
f[num]=true;
ans[now]=num;
if(now==n)
{
cout<<s[ans[1]];
for(int i=2;i<=n;i++) cout<<'.'<<s[ans[i]];
exit(0);
}
int ee=s[num][s[num].length()-1];
for(int i=1;i<=n;i++)
if((!f[i])&&s[i][0]==ee) dfs(now+1,i);
f[num]=false;
ans[now]=0;
return ;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
cin>>s[i];
b_st[s[i][0]-'a']++;
b_ed[s[i][s[i].length()-1]-'a']++;
}
sort(s+1,s+n+1);
for(int i=0;i<26;i++)
if(b_st[i]-b_ed[i]==1) st=i;
else if(b_ed[i]-b_st[i]==1) ed=i;
for(int i=1;i<=n;i++)
if(s[i][0]-'a'==st&&(s[i][s[i].length()-1]!=ed||b_ed[ed]!=1))
{
dfs(1,i);
puts("***");
return 0;
}
return 0;
}
万分感谢QAQ