สมมติว่าเรามีกระดานหมากรุกอันสิ้นสุดที่มีกฎเหมือนหมากรุก และมีพิกัดของ N ม้าบนกระดานอันสิ้นสุดและพิกัดของกษัตริย์ เราต้องตรวจสอบว่ากษัตริย์ถูกเช็กเมทหรือไม่ พิกัดของกระดานอันสิ้นสุดถูกจำกัดด้วยค่ามาก เช่น (-10^9 <= x, y <= 10^9)
ตัวอย่าง
หากอินพุตคือตำแหน่งม้า = [[2,1],[1,3],[3,6],[5,5],[6,1],[7,3]] และตำแหน่งกษัตริย์: [4,3]

ผลลัพธ์จะเป็น True เนื่องจากกษัตริย์ไม่มีการเดินที่ถูกต้อง จึงเป็นเช็กเมท
ขั้นตอนการแก้ปัญหา
my_dict:= แมปใหม่- ลูป
iจาก 0 ถึงn:x := a[i][0]y := a[i][1]- ทำเครื่องหมายตำแหน่งม้าและตำแหน่งที่ม้าโจมตีได้ทั้ง 8 ทิศทางใน
my_dict
- ลูป
iจาก -1 ถึง 1:- ลูป
jจาก -1 ถึง 1:nx := king_pos[0] + iny := king_pos[1] + j- ถ้า
i != 0 and j != 0:- ถ้า
my_dict[(nx, ny)]เป็นศูนย์ ให้คืนค่าFalse
- ถ้า
- ลูป
- คืนค่า
True
การใช้งาน
def is_checkmate(a, n, king_pos):
my_dict = {}
for i in range(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
for i in range(-1, 2):
for j in range(-1, 2):
nx = king_pos[0] + i
ny = king_pos[1] + j
if i != 0 and j != 0:
if not my_dict.get((nx, ny), 0):
return False
return True
a = [[2,1],[1,3],[3,6],[5,5],[6,1],[7,3]]
n = len(a)
pos = [4, 3]
print(is_checkmate(a, n, pos))
อินพุต
[[2,1],[1,3],[3,6],[5,5],[6,1],[7,3]], 6, [4, 3]
เอาต์พุต
True