Вступ
Популярна головоломка - перетворити одне слово на інше через ряд кроків, які замінюють лише одну букву і завжди призводять до дійсного слова. Наприклад, BAG можна перетворити на DOG шляхом шляхом в п'ять кроків:
КОРОБКА -> БАТЬ -> КОШКА -> КОТ -> КОГ -> ПС
У цьому випадку також існують коротші шляхи; наприклад:
КОРОБКА -> БОГ -> КУЧКА
Якби намалювати графік, вершини якого позначені словами, з краєм між будь-якою парою слів, які відрізняються однією літерою, то найкоротший шлях від "BAG" до "DOG" складатиметься з двох ребер.
Виклик
Ви повинні написати програму, яка отримує на вхід "словник" слів, які мають однакову довжину, представляючи всі допустимі слова, які можуть відображатися як кроки по шляху. Він повинен вивести принаймні один "найдовший найкоротший шлях", тобто шлях між двома словами, який є:
не довший, ніж будь-який інший шлях між цими двома словами;
принаймні до тих пір, як найкоротший можливий шлях між будь-якими іншими парами слів у списку.
У контексті описаного вище графіка довжина такого шляху є діаметром графіка.
У виродженому випадку, коли жодне із вхідних слів не можна перетворити на будь-яке з інших, виведіть принаймні один шлях довжиною нульової, тобто одне слово.
Приклади
Вхід ["сумка", "кажан", "кішка", "дитяче ліжечко", "крапка", "собака"] повинен дати шлях, який проходить усі шість слів у тому порядку (або зворотний порядок), оскільки найкоротший шлях від " мішок "до" собаки "в цьому словнику - це найдовший досягнення, п’ять кроків.
Вхід ["сумка", "кажан", "бот", "кішка", "дитяче ліжечко", "крапка", "собака"] повинен дати шлях "сумка, кажан, бот, крапка, собака" та / або його розворот.
Вхід ["код", "гольф", "самець", "гудіння", "моль", "роль", "цвіль", "холод", "золото", "режим"] повинен пройти шлях між "кодом і "гольф".
Вхідні дані ["один", "два", "шість", "десять"] відповідають графіку без ребер, тому виведіть один або кілька однословних (нульової довжини) шляхів.
Якщо вхід містить два слова неоднакової довжини, вихід не визначений.
Правила
- Діють стандартні правила гольф-коду
- Буде кілька "найкоротших" шляхів. Ви повинні вивести принаймні одне, але вільне виводити скільки завгодно.
- Ви можете вирішити, як словник для введення передається у вашу програму.
- Виграє найкоротший код у байтах.
[]чи [[]])?