Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ตรวจสอบว่ากษัตริย์สามารถย้ายการเคลื่อนไหวที่ถูกต้องหรือไม่เมื่อมี N nights อยู่ในกระดานหมากรุกที่ดัดแปลงใน Python


สมมติว่าเรามีกระดานหมากรุกที่ไม่มีที่สิ้นสุดหนึ่งกระดานที่มีกฎเดียวกันกับหมากรุก และหากมีพิกัด N อัศวินบนกระดานหมากรุกที่ไม่มีที่สิ้นสุดและพิกัดของกษัตริย์ เราต้องตรวจสอบว่าพระราชาเป็นผู้รุกฆาตหรือไม่ พิกัดของกระดานไม่มีที่สิ้นสุดถูกล้อมรอบด้วยค่าขนาดใหญ่เช่น (-10^9 <=x, y <=10^9)

ดังนั้น ถ้าข้อมูลเข้าเหมือนตำแหน่งอัศวิน =[[2,1],[1,3],[3,6],[5,5],[6,1],[7,3]] และตำแหน่งกษัตริย์ :[4,3],

ตรวจสอบว่ากษัตริย์สามารถย้ายการเคลื่อนไหวที่ถูกต้องหรือไม่เมื่อมี N nights อยู่ในกระดานหมากรุกที่ดัดแปลงใน Python

แล้วผลลัพธ์จะเป็นจริง เพราะราชาไม่มีการเคลื่อนไหว จึงเป็นเช็คเมท

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • my_dict :=แผนที่ใหม่
  • สำหรับ i ในช่วง 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
  • สำหรับฉันอยู่ในช่วง -1 ถึง 1 ทำ
    • สำหรับ j ในช่วง -1 ถึง 1 ทำ
      • nx :=king_pos[0] + i
      • ny :=king_pos[1] + j
      • ถ้าฉันไม่เหมือนกับ 0 และ j ไม่เหมือนกับ 0 แล้ว
        • ถ้า my_dict[(nx, ny)] เป็นศูนย์ แล้ว
          • คืนค่าเท็จ
  • คืนค่า True

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

def is_checkmate(a, n, king_pos):my_dict ={} สำหรับ i ในช่วง (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 และ 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))

อินพุต

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

ผลลัพธ์

จริง