-1

这是我计算女王对角线所有可能移动的函数:

def dia(n, r_q, c_q, obs):
    ans = 0

    # up right
    cnt = 1
    while cnt + r_q <= n and cnt + c_q <= n:
        if [cnt + r_q, cnt + c_q] in obs:
            break
        ans += 1 
        cnt += 1
    
    # down left    
    cnt = 1
    while r_q - cnt >= 1 and c_q - cnt >= 1: 
        if [r_q - cnt, c_q - cnt] in obs:
            break
        ans += 1 
        cnt += 1

    # left up
    cnt = 1
    while r_q - cnt >= 1 and c_q + cnt <= n:      
        if [r_q - cnt, c_q + cnt] in obs:
            break
        print([r_q - cnt, c_q + cnt])
        ans += 1 
        cnt += 1

    # right down   
    cnt = 1
    while r_q + cnt <= n and c_q - cnt >= 1:      
        if [r_q + cnt, c_q - cnt]  in obs:
            break
        print([r_q + cnt, c_q - cnt])
        ans += 1 
        cnt += 1
    return ans

参数是:

  • n板尺寸,即n=8表示它是 8x8 板。
  • r_q皇后区,
  • c_q女王专栏,
  • obs位于女王对角线上的所有障碍物。

有时它不能提供正确数量的可能移动。

我缺少什么,如何修复或找到更好的此功能实现?

棋盘

4

1 回答 1

0

此代码更好,您可以使用它来获得两者(对角线和直线)。

queenpos = [x, x]
directions = [(1, 0), (0, 1), (1, 1), (1, -1)]
for dir in directions:
    for m in [-1, 1]:
        d = dir * m
        for i in range(8):
            row = queenpos[0] + d[0]
            col = queenpos[1] + d[1]
            if row < 8 and row > -1 and col < 8 and col > -1:
            obs = board.getpiece(row, col)
            if obs is not None: break
            print(row, col)

这有点难以理解,但它应该可以工作。

于 2021-07-31T15:19:30.417 回答