我陷入了一个编程问题。我需要帮助!
问题如下。给定一个单词列表,如果可以创建如下的单词链,我必须返回true。
cat tab bat等,即一个单词的结束字母必须是链中另一个的开头。
我该如何实现呢?我只能想到蛮力解决方案,我会生成列表的所有排列,然后检查它是否符合条件。
感谢。
答案 0 :(得分:4)
考虑一个有向图,每个字母都有一个顶点,每个字都有一个边。
所以单词“cat”对应于从顶点“c”到顶点“t”的有向边。
在此图表中,您试图查看是否存在Eulerian path。
检查Eulerian路径可以按照Wiki页面上的说明完成:
有向图有一条欧拉路径,当且仅当最多只有一条 顶点有(out-degree) - (in-degree)= 1,最多有一个顶点 (in-degree) - (out-degree)= 1,每隔一个顶点具有相等的in-degree 和out-degree,以及所有非零度的顶点都属于 基础无向图的单个连通分量。
在这张照片中,我们可以通过旅行“c” - >“t” - >“b” - >“t”来旅行所有边缘。
这是一条欧拉路径(沿着所有边缘行进),对应于单词cat,tab,bat。