现在很崩溃,无论怎么优化还是会卡8,9两个点,心态有点崩溃了,这道题的题解好多都是错的,前几篇只有一篇是对的,其他都是错的..求大佬有空帮忙看一下,如何去优化,或者指点一下,如何找到最开始的单词
#include <iostream>
#include <vector>
#include <cstring>
#include <algorithm>
using namespace std;
#define Max 1005
string str[Max];
vector<int > Graph[Max];
vector<string> t; //存放结果
bool flags=false;//是否被访问到
bool flag[Max];//是否被放入t中
int num=0;//放入了几个到t里面了
void dfs(int v,int n);
int main() {
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> str[i];
}
sort(str+1,str+n+1); //从小到大排好序
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(i!=j&&str[i][str[i].length()-1]==str[j][0])
{
Graph[i].push_back(j);
}
}
}
for(int i=1;i<=n;i++)
{
memset(flag,false, sizeof(flag));
num=1;
flag[i]=true;
t.push_back(str[i]);
dfs(i,n);
t.clear();
if(flags)
{
break;
}
}
if(!flags)
{
cout<<"***";
}
return 0;
}
void dfs(int v,int n)
{
if(flags)
{
return ;
}
else if(num==n)
{
flags=true;
for(int i=0;i<n;i++)
{
cout<<t[i];
if(i!=n-1)
{
cout<<'.';
}
}
return ;
}
for(int i=0;i<Graph[v].size();i++)
{
if(!flag[Graph[v][i]])
{
flag[Graph[v][i]]=true;
t.push_back(str[Graph[v][i]]);
num++;
dfs(Graph[v][i],n);
flag[Graph[v][i]]=false;
t.pop_back();
num--;
}
}
}