В известной игре (также называемой "Метаграммой") необходимо из одного слова сделать другое, меняя за один ход по одной букве. Например, сделать из мухи слона можно так: муха - мура - тура - тара - кара - каре - кафе - кафр - каюр - каюк - крюк - урюк - урок - срок - сток - стон - слон.
Напишите программу, которая по данному набору слов, начальному и конечному слову, находит самый короткий способ превратить одно слово в другое.
Формат входных данных Первое число входных данных содержит целое число N, 2≤N≤105. Далее идет N различных строчек, каждая из которых содержит одно словарное слово. Все слова состоят из заглавных латинских букв и имеют равную длину, не превосходящую 10.
Программа должна найти наименьшую цепочку, состоящую из данных слов. Цепочка должна начинаться со слова, идущего в словаре первым и заканчиваться словом, идущим в словаре вторым. Два соседних слова в цепочке должны отличаться ровно в одной букве.
Формат выходных данных Первая строка выходных данных должна содержать количество слов в минимальной искомой цепочке (включая начальное и конечное слово). Далее должны идти все слова цепочки.
Если искомой цепочки не существует, программа должна вывести число 0.
Решение поставленной задачи сводится к двум этапам:
- Построени матрицы смежности графа
На первом этапе выстриваются все возможные варианты преобразований одного слова словаря в другое путём изменения одной любой буквы слова. Варианты преобразований являются ничем иным, как графом, в котором вес перехода = 1 в случае, если преобразование за 1 шаг возможно. В противном случае вес принимает значение 0. Граф представляется в виде его матрицы переходов. - Поиск кратчайшего пути между 2 вершинами графа
На втором этапе ищется кратчайший путь преобразования из исходного слова в конечное (в условии задачи, из 0-ого в 1-ое слово словаря). Данная задача решается с помощью алгоритма Дейкстры.
8 BAY PET RAY BET ONE TWO BAT RAT
BAY -> BAT -> BET -> PET