Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Особенность bfs в том, что он доходит до каждой вершины кратчайшим путем из стартовой. Длину этого пути для каждой вершины мы так же можем поддерживать, пусть w[x] -- кратчайшее расстояние до x. Если в вершину x мы пришли за один шаг из вершины y, тогда w[x] = w[y] + 1.
- Запустим dfs от нашего коня, и для каждой клетки будем поддерживать расстояние от коня до нее (кол-во ходов коня до нее).
- Пример кода на python:
- from queue import Queue
- n = int(input())
- sx, sy = map(int, input().split())
- sx -= 1
- sy -= 1
- fx, fy = map(int, input().split())
- fx -= 1
- fy -= 1
- rst = [[-1 for i in range(n)] for j in range(n)]
- rst[sx][sy] = 0
- nei = [(1, 2), (1, -2), (-1, 2), (-1, -2),
- (2, 1), (2, -1), (-2, 1), (-2, -1)]
- q = Queue()
- q.put((sx, sy))
- while not q.empty():
- h = q.get()
- for e in nei:
- x = h[0] + e[0]
- y = h[1] + e[1]
- if min(x, y) >= 0 and max(x, y) < n and rst[x][y] == -1:
- rst[x][y] = rst[h[0]][h[1]] + 1
- q.put((x, y))
- print(rst[fx][fy])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement