中级农民
- 积分
- 102
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2018-9-20
- 最后登录
- 1970-1-1
|
写了个第一题大家说的BFS的解法,但现在只能return 最短距离,而且觉得代码有点长。 请教大家怎么return最短距离的X,Y的坐标值, 谢谢!
- def manhattanXYDist(grid):
- if not grid or not grid[0]:
- return
- rows = len(grid)
- cols = len(grid[0])
- qX = []
- qY = []
- count = 0
- deltaX = [0,0,-1,1]
- deltaY = [-1,1,0,0]
- for i in range(rows):
- for j in range(cols):
- if grid[i][j] == 'X':
- qX.append(i)
- qY.append(j)
- while qX and qY:
- tempX = qX
- tempY = qY
- qX = []
- qY = []
- count += 1
- while tempX and tempY:
- curX = tempX.pop(0)
- curY = tempY.pop(0)
- for i in range(4):
- nbX = curX + deltaX[i]
- nbY = curY + deltaY[i]
- if 0 <= nbX < rows and 0<=nbY < cols:
- if grid[nbX][nbY] == '0':
- grid[nbX][nbY] = count
- if grid[nbX][nbY] == 'Y':
- return count
- qX.append(nbX)
- qY.append(nbY)
- return -1
- grid = [['X','0','X','0'],
- ['0','0','0','0'],
- ['0','0','0','Y']]
- print(manhattanXYDist(grid))
复制代码 |
|