Advertisement
nq1s788

Untitled

Dec 22nd, 2024
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.36 KB | None | 0 0
  1. Давайте представим, что наши числа это вершины в графе, а 4 действия которые нам даны для преобразований -- правила по которым формируются ребра. Например, из вершины 1234 у нас есть четыре ребра в 2234, 1233, 4123, 2341.
  2.  
  3. Таким образом задача сводится к нахождению кратчайшего пути в невзвешанном графе, это умеет делать bfs. Будем для каждого числа поддерживать число, из которого мы его получили, для того чтобы восстановить преобразования.
  4.  
  5. Пример кода на python:
  6. from queue import Queue
  7. st = int(input())
  8. fin = int(input())
  9. prev = {}
  10. prev[st] = -1
  11. q = Queue()
  12. q.put(st)
  13. while not q.empty():
  14.     h = q.get()
  15.     nxt = []
  16.     if h // 1000 != 9:
  17.         nxt.append(h + 1000)
  18.     if h % 10 != 1:
  19.         nxt.append(h - 1)
  20.     nxt.append((h % 1000) * 10 + h // 1000)
  21.     nxt.append((h % 10) * 1000 + h // 10)
  22.     for e in nxt:
  23.         if e not in prev:
  24.             prev[e] = h
  25.             q.put(e)
  26. path = []
  27. while fin != -1:
  28.     path.append(fin)
  29.     fin = prev[fin]
  30. path.reverse()
  31. for e in path:
  32.     print(e)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement