是做法本身就有问题吗
using namespace std;
#define ll long long
vector<string> s(1005);
vector<vector<ll>> adj(1005);
vector<ll> du(1005,0);
vector<ll> vis(1005,0);
ll n;
ll start=0,ending=0,cnt=0;
bool cmp(ll a,ll b){
return s[a]<s[b];
}
void dfs(ll x,ll c, string l){
if(c==n){
cout<<l;
return;
}
else{
for(int i=0;i<adj[x].size();i++){
if(vis[adj[x][i]]==0){
vis[adj[x][i]]=1;
dfs(adj[x][i],c+1,l+'.'+s[adj[x][i]]);
vis[adj[x][i]]=0;
}
}
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>s[i];
for(int j=1;j<i;j++){//建图记录度
if(s[j].front()==s[i].back()){
adj[i].push_back(j);
du[j]--;
du[i]++;
}
if(s[i].front()==s[j].back()){
adj[j].push_back(i);
du[i]--;
du[j]++;
}
}
}
for(int i=1;i<=n;i++){
sort(adj[i].begin(),adj[i].end(),cmp);//字典序排列邻接表
}
for(int i=1;i<=n;i++){
if(du[i]!=0){//根据度来判断起始点
cnt++;
if(du[i]==1){
start=i;
}
if(du[i]==-1){
ending=i;
}
}
if(cnt>2){
cout<<"***";
return 0;
}
}
if(cnt==0){//没有明确的起始点就拿最小点当起始点
for(int i=1;i<=n;i++){
if(s[start]>s[i]){
start=i;
}
}
}
vis[start] = 1;
dfs(start,1,s[start]);
}```
求指导