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

การโจมตีของอัศวินใน Python


สมมติว่าเรามีเมทริกซ์ไบนารีสองมิติ แทนกระดานหมากรุกสี่เหลี่ยม โดยที่ 0 สำหรับช่องว่าง และ 1 สำหรับอัศวิน อัศวินสามารถเคลื่อนสี่เหลี่ยมออกไปสองช่องในแนวนอนและหนึ่งช่องในแนวตั้ง หรือสองช่องในแนวตั้ง และอีกหนึ่งช่องในแนวนอน (เช่น อัศวินกระดานหมากรุก) เราต้องเช็คก่อนว่ามีอัศวิน 2 คนโจมตีกันหรือไม่

ดังนั้นหากอินพุตเป็นแบบ

0 0 0 0 0
0 1 0 0 0
0 0 0 1 0

จากนั้นผลลัพธ์จะเป็น True

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

  • แถว, col :=จำนวนแถวของเมทริกซ์, จำนวนคอลัมน์ของเมทริกซ์
  • สำหรับ r ในช่วง 0 ถึงแถวที่ 1 ทำ
    • สำหรับ c ในช่วง 0 ถึง col-1 ทำ
      • ถ้า A[r][c] ไม่ใช่ศูนย์ ดังนั้น
        • สำหรับแต่ละ nr, nc ใน [(r+1, c-2), (r+1, c+2), (r+2, c-1), (r+2, c+1)] , ทำ
          • ถ้า nr อยู่ในช่วงของแถวและ nc อยู่ในช่วงของ col และ A[nr, nc] ไม่ใช่ศูนย์ ดังนั้น
            • คืนค่า True
  • คืนค่าเท็จ

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

ตัวอย่าง

class Solution:
   def solve(self, A):
      row, col = len(A), len(A[0])
      for r in range(row):
         for c in range(col):
            if A[r][c]:
               for nr, nc in ((r+1, c-2), (r+1, c+2), (r+2, c-1), (r+2, c+1)):
                  if 0 <= nr < row and 0 <= nc <col and
                     A[nr][nc]:
                     return True
      return False
ob = Solution()
mat = [[0,0,0,0,0],
[0,1,0,0,0],
[0,0,0,1,0]]
print(ob.solve(mat))

อินพุต

[[0,0,0,0,0],
[0,1,0,0,0],
[0,0,0,1,0]]

ผลลัพธ์

True