Alex-Kud / CarrollChains

Решение задачи цепей Кэрролла

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Цепочки Кэрролла


Задание

В известной игре (также называемой "Метаграммой") необходимо из одного слова сделать другое, меняя за один ход по одной букве. Например, сделать из мухи слона можно так: муха - мура - тура - тара - кара - каре - кафе - кафр - каюр - каюк - крюк - урюк - урок - срок - сток - стон - слон.

Напишите программу, которая по данному набору слов, начальному и конечному слову, находит самый короткий способ превратить одно слово в другое.

Формат входных данных Первое число входных данных содержит целое число N, 2≤N≤105. Далее идет N различных строчек, каждая из которых содержит одно словарное слово. Все слова состоят из заглавных латинских букв и имеют равную длину, не превосходящую 10.

Программа должна найти наименьшую цепочку, состоящую из данных слов. Цепочка должна начинаться со слова, идущего в словаре первым и заканчиваться словом, идущим в словаре вторым. Два соседних слова в цепочке должны отличаться ровно в одной букве.

Формат выходных данных Первая строка выходных данных должна содержать количество слов в минимальной искомой цепочке (включая начальное и конечное слово). Далее должны идти все слова цепочки.

Если искомой цепочки не существует, программа должна вывести число 0.


Решение

Решение поставленной задачи сводится к двум этапам:

  • Построени матрицы смежности графа
    На первом этапе выстриваются все возможные варианты преобразований одного слова словаря в другое путём изменения одной любой буквы слова. Варианты преобразований являются ничем иным, как графом, в котором вес перехода = 1 в случае, если преобразование за 1 шаг возможно. В противном случае вес принимает значение 0. Граф представляется в виде его матрицы переходов.

  • Поиск кратчайшего пути между 2 вершинами графа
    На втором этапе ищется кратчайший путь преобразования из исходного слова в конечное (в условии задачи, из 0-ого в 1-ое слово словаря). Данная задача решается с помощью алгоритма Дейкстры.

Пример

Входные данные

8 BAY PET RAY BET ONE TWO BAT RAT

Граф

image

Матрица связности граф

image

Кратчайшая цепочка переходов

BAY -> BAT -> BET -> PET

Работа программы

image

About

Решение задачи цепей Кэрролла


Languages

Language:C# 100.0%