•diagonal_conflict(board, r, c)
:
给定一个板和两个整数表示行/列位置, 确定女王是否已经与坐标(r,c)放在同一对角线上;把答案作为回答 布尔值。
实施例
o diagonal_conflict([[True,False],[False,False]],1,1)→True
o diagonal_conflict([[True,False],[False,False]],1,0)→False
我已经弄明白这三件事
从r和c中减去1,直到你越界,r或c击中负数
向r和c添加1,直到您越界。这是len(董事会)
- 醇>
将1加到r中,从c中减去1(这是为了让对角线朝另一个方向移动)
但不知道如何开始为它编写代码。我知道上面每个都需要3个循环。 我最好的是
def conflict(board,r,c):
for (r,c) in board
if r+1==r and...
很明白这是错误的,有人可以把我的想法变成python代码吗?
答案 0 :(得分:2)
你走了。我是为你而做的;)
def diagonal_conflict(board, r, c):
for r_add, c_add in ((-1, -1), (1, 1), (-1, 1), (1, -1)):
current_r = r
current_c = c
while 0 <= current_r < len(board) and 0 <= current_c < len(board[0]):
if board[current_r][current_c]:
return True
current_r += r_add
current_c += c_add
return False
另一个由@abhaybhatia创建的逻辑解决方案现在转换为Python:
def diagonal_conflict(board, r, c):
for i in range(len(board)):
for j in range(len(board[i])):
if board[i][j] and (float(c-j)/(r-i) in (1, -1)):
return True
return False
答案 1 :(得分:0)
你有正确的想法。有人说,如果你会说英语,你可以写Python。为了给你一个提示,如果你重写了问题中使用这个词直到的每个句子,以便在时使用这个词,该怎么办?
例如,
从r和c中减去1,直到你超出界限,这时r或c命中负数
可以改写为
虽然r和c不是负数,但从r中减去1并从c中减去1
然后Python显而易见:
while r >= 0 and c >= 0:
# check for a queen
r -= 1
c -= 1
答案 2 :(得分:0)
你可以让女王在4个方向上
因此,如果您知道女王的位置,您应该检查r,c和女王坐标的斜率是1还是-1 - 然后它们在同一对角线上
这里有一些python代码
def diagonal_conflict(board, r, c):
for i in range(len(board)):
for j in range(len(board[i])):
if board[i][j] and (float(c-j)/(r-i) in (1, -1)):
return True
return False