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

การโจมตีของม้าใน Python

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

ตัวอย่าง

00000
01000
00010

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

ขั้นตอนการแก้ปัญหา

  1. row, col := จำนวนแถวของเมทริกซ์, จำนวนคอลัมน์ของเมทริกซ์
  2. ลูป r จาก 0 ถึง row-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 อยู่ในช่วงคอลัมน์ และ A[nr][nc] ไม่เป็นศูนย์ ให้คืนค่า True
  3. คืนค่า False

การใช้งาน

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