自以为代码没问题的我
#include<bits/stdc++.h>
using namespace std;
int n,frist,last,h=0;
string a,ans="",w;
char flag1,flag2;
struct node{
string name;
char b,e;
bool bo;
}s[10005];
map<char,int> cnt;
void dfs(int x){
s[x].bo=1;
cout<<s[x].name;
h++;
if(x!=last) cout<<".";
for(int i=1;i<=n;i++){
if(!s[i].bo && s[i].b==s[x].e){
if(i==last){
cout<<s[i].name;
}
else dfs(i);
}
}
}
bool cmp(node x,node y){
return x.name<y.name;
}
int main(){
cin>>n;
if(n==1){
cin>>a;
cout<<a;
return 0;
}
for(int i=1;i<=n;i++){
cin>>a;
s[i].name=a;
s[i].b=a[0];
s[i].e=a[a.size()-1];
cnt[s[i].b]++;
cnt[s[i].e]++;
}
for(char i='a';i<='z';i++){
if(cnt[i]>=2) h+=cnt[i]/2;
if(cnt[i]%2==1){
if(flag1==0) flag1=i;
else flag2=i;
}
}
if(flag1>flag2) swap(flag1,flag2);
if(h+1!=n){
cout<<"***";
return 0;
}
sort(s+1,s+1+n,cmp);
for(int i=1;i<=n;i++){
if(s[i].b==flag1){
frist=i;
break;
}
}
for(int i=n;i>=1;i--){
if(s[i].e==flag2){
last=i;
break;
}
}
dfs(frist);
return 0;
}
求救大佬们