每扇门上都有大量的磁性板。每个盘子上都写着一个字。必须将这些板排列成一个序列,使得每个单词都以与前一个单词结尾相同的字母开头。例如,单词acm''后跟单词 摩托罗拉''。
例如: skenzo LogicBoxes的 orderbox
ans:订购可能
我知道这个问题与欧拉路径有关。但我无法实现它。有人能告诉我它是如何实现的。意味着我应该如何制作图表以及必须连接哪些节点。我知道我必须使用邻接矩阵,但必须连接哪些节点。
答案 0 :(得分:3)
WORDS1,如果我没记错的话。与其他人相反,我同意你想要的是欧拉路径,而不是汉密尔顿主义者。在结果图中,单词是边(从第一个字母到最后一个字母)和字母(方便地只是小写字母从' a'到z'在ASCII中)的顶点。
实际上,你想要的不是路径本身,你只想知道是否有路径。所以你需要在图表上有必要和充分的条件来存在欧拉路径。
显然,要存在这样的路径,必须连接图形。您可以使用 union find 有效地确定。
然后,这种路径的存在对顶点的入口和出口构成条件。如果你正确地制定了这些条件,a)它们是必要和充分的,b)它们很容易检查。
自己找到条件会更有趣,但您也可以在维基百科关于欧拉路径的文章中找到它们。
答案 1 :(得分:0)
第一个和最后一个符号的Ascii代码可以用作图顶点。您可以尝试使用DFS进行顶点排序,然后检查是否所有顶点都已排序。如果是这样,那么所有单词都可以按照该顺序排列。