这题还是比较难的。
首先建图方面,如果单纯的把单词作为点,能拼接的关系作为边,那么就是哈密顿图(每个点仅能走一次),难度比较大。
换一种思路,就是把每个单词看成一条有向边,由该单词的首字母指向尾字母。
那么这题便是欧拉图的问题了。
本质上采用的还是搜索,但是为了快速得到字典序最小的欧拉路径,首先要对单词集进行排序。
排完序后,用边集数组存图;再通过计算各点的出度与入度,同时判断基图(不考虑边的方向的图)的连通性,判断是否存在欧拉回路或欧拉通路。
如果存在欧拉回路,那么就从0开始搜索;
如果存在欧拉通路,那么就从“出度=入度+1”的点开始搜索。
参考代码如下:
边集数组存图+并查集判断连通性
#include
using namespace std;
#include
#include
#include
#include
#include
#include
#include
#include