classic Word Ladder shortest transformation

Added: 2025-09-13 00:16:23

Question Image

classic Word Ladder shortest transformation

Answer

✏️ Edit
from collections import deque

def one_letter_diff(w1, w2):
    diff = 0
    for a, b in zip(w1, w2):
        if a != b:
            diff += 1
            if diff > 1:
                return False
    return diff == 1

def word_ladder(start, end, dictionary):
    dictionary = set(dictionary)
    if end not in dictionary:
        return None

    queue = deque([[start]])
    visited = {start}

    while queue:
        path = queue.popleft()
        last = path[-1]

        if last == end:
            return path

        for word in list(dictionary):
            if word not in visited and one_letter_diff(last, word):
                visited.add(word)
                queue.append(path + [word])

    return None

# --- Robust input reading ---
words = input().strip().split()
start, end = words[0], words[1]
dictionary = words[2:]

result = word_ladder(start, end, dictionary)
if result:
    print(" ".join(result))
else:
    print("null")