Computer >> Máy Tính >  >> Lập trình >> Python

Kiểm tra xem một nhà vua có thể di chuyển một nước đi hợp lệ hay không khi có N đêm trong một bàn cờ đã sửa đổi bằng Python

Giả sử chúng ta có một bàn cờ vô hạn với các quy tắc giống như của cờ vua và nếu có N tọa độ quân mã trên bàn cờ vô hạn và tọa độ của vua, chúng ta phải kiểm tra xem Vua có phải là quân cờ hay không. Tọa độ của bảng vô hạn được giới hạn bởi giá trị lớn như (-10 ^ 9 <=x, y <=10 ^ 9).

Vì vậy, nếu đầu vào giống như vị trí hiệp sĩ =[[2,1], [1,3], [3,6], [5,5], [6,1], [7,3]] và vị trí vua :[4,3],

Kiểm tra xem một nhà vua có thể di chuyển một nước đi hợp lệ hay không khi có N đêm trong một bàn cờ đã sửa đổi bằng Python

thì đầu ra sẽ là True, vì vua không có động thái nào, vì vậy nó là người bạn đời của séc.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • my_dict:=một bản đồ mới
  • đối với tôi trong phạm vi từ 0 đến n, thực hiện
    • x:=a [i, 0]
    • y:=a [i, 1]
    • my_dict [x, y]:=1
    • my_dict [x - 2, y + 1]:=1
    • my_dict [x - 2, y - 1]:=1
    • my_dict [x + 1, y + 2]:=1
    • my_dict [x + 1, y - 2]:=1
    • my_dict [x - 1, y + 2]:=1
    • my_dict [x + 2, y + 1]:=1
    • my_dict [x + 2, y - 1]:=1
    • my_dict [x - 1, y - 2]:=1
  • đối với tôi trong phạm vi -1 đến 1, thực hiện
    • đối với j trong phạm vi -1 đến 1, thực hiện
      • nx:=king_pos [0] + i
      • ny:=king_pos [1] + j
      • nếu tôi không giống 0 và j không giống 0, thì
        • nếu my_dict [(nx, ny)] bằng 0, thì
          • trả về Sai
  • trả về True

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

 def is_checkmate (a, n, king_pos):my_dict ={} cho tôi trong phạm vi (0, n):x =a [i] [0] y =a [i] [1] my_dict [(x, y)] =1 my_dict [(x - 2, y + 1)] =1 my_dict [(x - 2, y - 1)] =1 my_dict [(x + 1, y + 2)] =1 my_dict [( x + 1, y - 2)] =1 my_dict [(x - 1, y + 2)] =1 my_dict [(x + 2, y + 1)] =1 my_dict [(x + 2, y - 1) ] =1 my_dict [(x - 1, y - 2)] =1 cho tôi trong dải (-1, 2):cho j trong dải (-1, 2):nx =king_pos [0] + i ny =king_pos [1] + j if i! =0 and j! =0:if not my_dict [(nx, ny)]:return False return Truea =[[2,1], [1,3], [3,6] , [5,5], [6,1], [7,3]] n =len (a) pos =[4, 3] print (is_checkmate (a, n, pos)) 

Đầu vào

 [[2,1], [1,3], [3,6], [5,5], [6,1], [7,3]], 6, [4, 3]  

Đầu ra

 Đúng