求助各位大佬!!!! 这道题时间超限了,帮忙看下代码[求~~~]
#include <bits/stdc++.h>
int n, sum = 1;
std::string a_word;
std::vector <std::string> answer;
std::set <std::string> words;
std::map <std::string, bool> visited;
std::map <std::string, int> number;
void input ()
{
std::cin >> n;
for (int i = 1; i <= n; i++)
{
std::cin >> a_word;
words.insert (a_word);
number[a_word]++;
}
for (auto i : number) sum *= i.second;
}
void DFS_Chain_of_words (int layers)
{
if (layers == n + 1)
{
for (int i = 1; i <= sum; i++)
{
for (int j = 0; j < answer.size() - 1; j++) std::cout << answer[j] << ".";
std::cout << answer[answer.size() - 1] << std::endl;
}
exit (0);
}
for (auto word : words)
{
if (visited[word] == true) continue;
if (answer.size () > 0)
{
if (answer.back().back() != word[0]) continue;
}
answer.push_back (word); visited[word] = true;
DFS_Chain_of_words (layers + 1);
answer.pop_back (); visited[word] = false;
}
}
int main ()
{
input ();
DFS_Chain_of_words (1);
std::cout << "***";
return 0;
}