from pprint import pprint from collections import deque n = 8 start = input("Введи початкову клітину (наприклад, 1 1): ").split() end = input("Введи кінцеву клітину (наприклад, 8 8): ").split() start = (int(start[0]) - 1, int(start[1]) - 1) end = (int(end[0]) - 1, int(end[1]) - 1) board = [[-2 for _ in range(n)] for _ in range(n)] board[start[0]][start[1]] = -1 moves = [ (2, 1), (1, 2), (-1, 2), (-2, 1), (-2, -1), (-1, -2), (1, -2), (2, -1) ] queue = deque([(start[0], start[1], 0)]) while queue: x, y, step = queue.popleft() for dx, dy in moves: nx, ny = x + dx, y + dy if 0 <= nx < n and 0 <= ny < n and board[nx][ny] == -2: board[nx][ny] = step + 1 queue.append((nx, ny, step + 1)) pprint(board) if board[end[0]][end[1]] != -2: print(f"\n♞ Мінімальна кількість ходів: {board[end[0]][end[1]]}") else: print("\n❌ Неможливо досягти цільову клітину (щось пішло не так)")
1 1 5 5
Введи початкову клітину (наприклад, 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