求助~~~P1127 词链
  • 板块P1127 词链
  • 楼主li_rui_yuan
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/7/22 20:32
  • 上次更新2025/7/23 10:23:16
查看原帖
求助~~~P1127 词链
1805571
li_rui_yuan楼主2025/7/22 20:32

求助各位大佬!!!! 这道题时间超限了,帮忙看下代码[求~~~]

#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;
}
2025/7/22 20:32
加载中...