在此递归回溯函数中,我应该在哪里返回值?

问题描述

正在处理以下编码面试问题:

城市规划人员希望对城市进行规划,以使公园靠近人们的住所。给定一个代表城市的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 (将#修改为@)