问题描述
正在处理以下编码面试问题:
城市规划人员希望对城市进行规划,以使公园靠近人们的住所。给定一个代表城市的N x N矩阵,每个坐标可以是'H'(家),'W'(水)或'E'(空),请将K个公园,“ P”放在空白处城市的某些区域,使其靠近人们的住所。具体来说,请尽量减少曼哈顿从人们住宅到最近公园的距离之和。人们不能在水里游泳。
我正在尝试编写一个函数来解决此问题,给定网格,点,已尝试的点,已行进的距离以及迄今为止找到的最小距离,可以递归地找到到达该点的最短路径。任何公园。查看print
语句的输出,似乎该函数正确地找到了到公园的所有可能路径。但是我在努力返回最小距离。如果我在return mindist
块内isPark
,即使该函数打印正确的距离,该函数也会以某种方式返回None
。
def mdist2P(self,p,traversed,dist,mindist):
try:
if self.isPark(p):
print('found a park')
if dist <= mindist:
mindist = dist
print(mindist)
return mindist
else:
traversed.append(p)
print('traversing:')
pp.pprint(traversed)
if self.isValid([p[0]+1,p[1]],traversed):
print('traversing South')
self.mdist2P([p[0]+1,dist+1,mindist)
if self.isValid([p[0],p[1]+1],traversed):
print('traversing East')
self.mdist2P([p[0],mindist)
if self.isValid([p[0]-1,traversed):
print('traversing north')
self.mdist2P([p[0]-1,p[1]-1],traversed):
print('traversing West')
self.mdist2P([p[0],mindist)
#return mindist
except:
print('mdist input error')
给出该网格(0 =空,1 =房子,2 =水,3 =公园)并从0,0开始
[[2 1 0] [3 1 1] [0 2 1]]
print(sf.mdist2P([0,0],[],10))
这是输出:
traversing:
[[0,0]]
traversing South
found a park
1
traversing East
traversing:
[[0,[0,1]]
traversing South
traversing:
[[0,1],[1,1]]
traversing East
traversing:
[[0,2]]
traversing South
traversing:
[[0,2],[2,2]]
traversing north
traversing:
[[0,2]]
traversing West
found a park
3
None
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)