Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Давайте представим, что наши числа это вершины в графе, а 4 действия которые нам даны для преобразований -- правила по которым формируются ребра. Например, из вершины 1234 у нас есть четыре ребра в 2234, 1233, 4123, 2341.
- Таким образом задача сводится к нахождению кратчайшего пути в невзвешанном графе, это умеет делать bfs. Будем для каждого числа поддерживать число, из которого мы его получили, для того чтобы восстановить преобразования.
- Пример кода на python:
- from queue import Queue
- st = int(input())
- fin = int(input())
- prev = {}
- prev[st] = -1
- q = Queue()
- q.put(st)
- while not q.empty():
- h = q.get()
- nxt = []
- if h // 1000 != 9:
- nxt.append(h + 1000)
- if h % 10 != 1:
- nxt.append(h - 1)
- nxt.append((h % 1000) * 10 + h // 1000)
- nxt.append((h % 10) * 1000 + h // 10)
- for e in nxt:
- if e not in prev:
- prev[e] = h
- q.put(e)
- path = []
- while fin != -1:
- path.append(fin)
- fin = prev[fin]
- path.reverse()
- for e in path:
- print(e)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement