介绍
一个流行的单词拼图是通过一系列步骤将一个单词转换为另一个单词,这些步骤仅替换一个字母,并且始终生成有效的单词。例如,可以通过五个步骤将BAG转换为DOG:
袋-> BAT->猫-> COT-> COG->狗
在这种情况下,路径也较短。例如:
袋->沼泽->狗
如果绘制了一个图,其顶点被单词标记,则任何一对单词之间的边距相差一个字母,则从“ BAG”到“ DOG”的最短路径将由两个边组成。
挑战
您将要编写一个程序,该程序接收所有长度相同的单词的“字典”作为输入,这些单词代表所有可能出现的单词,这些单词可以沿路径显示为台阶。它应至少输出一个“最长最短路径”,即两个单词之间的路径:
不超过这两个词之间的任何其他路径;
至少与列表中任何其他单词对之间的最短路径一样长。
在上述图表的上下文中,这种路径的长度就是图表的直径。
在简并的情况下,所有输入单词都不能转换成其他任何单词,输出至少一个长度为零的路径,即单个单词。
例子
输入[“ bag”,“ bat”,“ cat”,“ cot”,“ dot”,“ dog”]应产生一条以该顺序(或相反顺序)遍历所有六个单词的路径,因为从“这个字典中“ bag”到“ dog”是最长的,五个步骤。
输入[“ bag”,“ bat”,“ bot”,“ cat”,“ cot”,“ dot”,“ dog”]应产生路径“ bag,bat,bot,dot,dog”和/或其路径逆转。
输入[“ code”,“ golf”,“ male”,“ buzz”,“ mole”,“ role”,“ mold”,“ cold”,“ gold”,“ mode”]应产生“ code”之间的路径和“高尔夫”。
输入[“ one”,“ two”,“ six”,“ ten”]对应于没有边的图,因此输出一个或多个单字(零长度)路径。
如果输入包含两个不等长的单词,则输出未定义。
规则
- 适用标准守则的高尔夫球规则
- 将有多个“最短”路径。您必须至少输出一个,但是可以自由输出任意数量的内容。
- 您可以自由决定如何将输入字典传递到程序中。
- 以字节为单位的最短代码获胜。
[]或[[]])?