Вступление
Популярная головоломка состоит в том, чтобы преобразовать одно слово в другое с помощью последовательности шагов, которые заменяют только одну букву и которые всегда приводят к правильному слову. Например, BAG может быть преобразован в DOG через путь из пяти шагов:
СУМКА -> BAT -> CAT -> COT -> COG -> СОБАКА
Более короткие пути также существуют в этом случае; например:
СУМКА -> БОГ -> СОБАКА
Если нарисовать граф, вершины которого были помечены словами, с ребром между любой парой слов, отличающихся на одну букву, то кратчайший путь от «BAG» до «DOG» будет состоять из двух ребер.
Вызов
Вы должны написать программу, которая получает в качестве входных данных «словарь» слов, имеющих одинаковую длину, представляющих все допустимые слова, которые могут появляться как шаги по пути. Он должен вывести хотя бы один «самый длинный кратчайший путь», то есть путь между двумя словами:
не длиннее любого другого пути между этими двумя словами;
по крайней мере, до максимально короткого пути между любой другой парой слов в списке.
В контексте графика, описанного выше, длина такого пути - это диаметр графика.
В вырожденном случае, когда ни одно из входных слов не может быть преобразовано ни в одно из других, выведите хотя бы один путь нулевой длины, то есть одно слово.
Примеры
Ввод ["bag", "bat", "cat", "cot", "dot", "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"] соответствуют графу без ребер, поэтому выведите один или несколько путей из одного слова (нулевой длины).
Если входные данные содержат любые два слова неравной длины, выходные данные не определены.
правила
- Применяются стандартные правила игры в гольф
- Там будет несколько «кратчайших» путей. Вы должны вывести хотя бы один, но можете вывести столько, сколько пожелаете.
- Вы можете сами решать, как вводить словарь в вашу программу.
- Самый короткий код в байтах побеждает.
[]или [[]])?