在Python中,檢查國王在修改後的棋盤上有N個騎士的情況下是否可以進行有效移動
假設我們有一個無限大的棋盤,規則與國際象棋相同。如果無限棋盤上有N個騎士的座標和國王的座標,我們必須檢查國王是否處於將死狀態。無限棋盤的座標由較大的值限定,例如(-10^9 <= x, y <= 10^9)。
例如,如果輸入是騎士的位置 = [[2,1],[1,3],[3,6],[5,5],[6,1],[7,3]] 和國王的位置: [4,3],

那麼輸出將為True,因為國王無法移動,所以處於將死狀態。
為了解決這個問題,我們將遵循以下步驟:
- my_dict := 一個新的對映
- 對於範圍從0到n的i,執行:
- 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的i,執行:
- 對於範圍從-1到1的j,執行:
- nx := king_pos[0] + i
- ny := king_pos[1] + j
- 如果i不等於0且j不等於0,則
- 如果my_dict[(nx, ny)]為零,則
- 返回False
- 如果my_dict[(nx, ny)]為零,則
- 對於範圍從-1到1的j,執行:
- 返回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[(nx, ny)]:
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
廣告
資料結構
網路
關係資料庫管理系統(RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP