Advertisement
nq1s788

Untitled

Dec 22nd, 2024
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.29 KB | None | 0 0
  1. Особенность bfs в том, что он доходит до каждой вершины кратчайшим путем из стартовой. Длину этого пути для каждой вершины мы так же можем поддерживать, пусть w[x] -- кратчайшее расстояние до x. Если в вершину x мы пришли за один шаг из вершины y, тогда w[x] = w[y] + 1.
  2.  
  3. Запустим dfs от нашего коня, и для каждой клетки будем поддерживать расстояние от коня до нее (кол-во ходов коня до нее).
  4.  
  5. Пример кода на python:
  6. from queue import Queue
  7. n = int(input())
  8. sx, sy = map(int, input().split())
  9. sx -= 1
  10. sy -= 1
  11. fx, fy = map(int, input().split())
  12. fx -= 1
  13. fy -= 1
  14. rst = [[-1 for i in range(n)] for j in range(n)]
  15. rst[sx][sy] = 0
  16. nei = [(1, 2), (1, -2), (-1, 2), (-1, -2),
  17.        (2, 1), (2, -1), (-2, 1), (-2, -1)]
  18. q = Queue()
  19. q.put((sx, sy))
  20. while not q.empty():
  21.     h = q.get()
  22.     for e in nei:
  23.         x = h[0] + e[0]
  24.         y = h[1] + e[1]
  25.         if min(x, y) >= 0 and max(x, y) < n and rst[x][y] == -1:
  26.             rst[x][y] = rst[h[0]][h[1]] + 1
  27.             q.put((x, y))
  28. print(rst[fx][fy])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement