fork download
  1. from pprint import pprint
  2. from collections import deque
  3. n = 8
  4. start = input("Введи початкову клітину (наприклад, 1 1): ").split()
  5. end = input("Введи кінцеву клітину (наприклад, 8 8): ").split()
  6. start = (int(start[0]) - 1, int(start[1]) - 1)
  7. end = (int(end[0]) - 1, int(end[1]) - 1)
  8. board = [[-2 for _ in range(n)] for _ in range(n)]
  9. board[start[0]][start[1]] = -1
  10. moves = [
  11. (2, 1), (1, 2), (-1, 2), (-2, 1),
  12. (-2, -1), (-1, -2), (1, -2), (2, -1)
  13. ]
  14. queue = deque([(start[0], start[1], 0)])
  15. while queue:
  16. x, y, step = queue.popleft()
  17. for dx, dy in moves:
  18. nx, ny = x + dx, y + dy
  19. if 0 <= nx < n and 0 <= ny < n and board[nx][ny] == -2:
  20. board[nx][ny] = step + 1
  21. queue.append((nx, ny, step + 1))
  22. pprint(board)
  23.  
  24. if board[end[0]][end[1]] != -2:
  25. print(f"\n♞ Мінімальна кількість ходів: {board[end[0]][end[1]]}")
  26. else:
  27. print("\n❌ Неможливо досягти цільову клітину (щось пішло не так)")
Success #stdin #stdout 0.28s 19288KB
stdin
1 1
5 5
stdout
Введи початкову клітину (наприклад, 1 1): Введи кінцеву клітину (наприклад, 8 8): [[-1, 3, 2, 3, 2, 3, 4, 5],
 [3, 4, 1, 2, 3, 4, 3, 4],
 [2, 1, 4, 3, 2, 3, 4, 5],
 [3, 2, 3, 2, 3, 4, 3, 4],
 [2, 3, 2, 3, 4, 3, 4, 5],
 [3, 4, 3, 4, 3, 4, 5, 4],
 [4, 3, 4, 3, 4, 5, 4, 5],
 [5, 4, 5, 4, 5, 4, 5, 6]]

♞ Мінімальна кількість ходів: 4