Python 中騎士攻擊


假設我們有一個二維二進位制矩陣,表示矩形的棋盤,其中 0 表示空單元格,1 表示騎士。騎士可以橫向移動兩個方格,縱向移動一個方格,或者縱向移動兩個方格,橫向移動一個方格(就像棋盤上的騎士)。我們必須檢查任意兩個騎士是否互相攻擊。

因此,如果輸入如下:

00000
01000
00010

則輸出為 True

為了解決這個問題,我們將遵循以下步驟:

  • 行數、列數表示矩陣的行數、列數
  • 對於 0 到行數-1 的 r,執行
    • 對於 0 到行數-1 的 c,執行
      • 如果 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
  • 返回 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

更新於:2020-09-23

209 人次瀏覽

啟動你的 事業

完成課程並獲得認證

開始
廣告