Advertisement
nq1s788

Untitled

Dec 22nd, 2024
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.86 KB | None | 0 0
  1. Для каждой клетки найдем, сколько минимально ходов понадобится красному коню, чтобы попасть в нее (с помощью bfs из синего коня), и сколько минимально ходов понадобится зеленому коню, чтобы попасть в нее (с помощью bfs из зеленого коня). Для того, чтобы оба коня дошли в эту клетку, понадобиться max из ходов красного и зеленого до нее (сколько самый медленный будет идти, столько времени и затратится). И найдем минимальное из всех этих значений среди всех клеток.
  2.  
  3. Пример кода на python:
  4. from queue import Queue
  5. r, g = input().split()
  6. r = (ord(r[0]) - ord('a'), int(r[1]) - 1)
  7. g = (ord(g[0]) - ord('a'), int(g[1]) - 1)
  8. red = [[-1 for i in range(8)] for j in range(8)]
  9. green = [[-1 for i in range(8)] for j in range(8)]
  10. red[r[0]][r[1]] = 0
  11. green[g[0]][g[1]] = 0
  12. nei = [(1, 2), (1, -2), (-1, 2), (-1, -2),
  13.        (2, 1), (2, -1), (-2, 1), (-2, -1)]
  14. q = Queue()
  15. q.put(r)
  16. while not q.empty():
  17.     h = q.get()
  18.     for e in nei:
  19.         x = h[0] + e[0]
  20.         y = h[1] + e[1]
  21.         if min(x, y) >= 0 and max(x, y) < 8 and red[x][y] == -1:
  22.             red[x][y] = red[h[0]][h[1]] + 1
  23.             q.put((x, y))
  24. q.put(g)
  25. while not q.empty():
  26.     h = q.get()
  27.     for e in nei:
  28.         x = h[0] + e[0]
  29.         y = h[1] + e[1]
  30.         if min(x, y) >= 0 and max(x, y) < 8 and green[x][y] == -1:
  31.             green[x][y] = green[h[0]][h[1]] + 1
  32.             q.put((x, y))
  33. answ = 1000000000
  34. for i in range(8):
  35.     for j in range(8):
  36.         answ = min(answ, max(red[i][j], green[i][j]))
  37. print(answ)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement