''' 解题思路: 1、对于节点距离,建立一个字典dict_t,以字符形式存储key,距离以数字形式保存在value中,重边取最小 2、定义一个函数dis(i,j):第i节点到第j个节点的距离,访问距离字典,有值返回,无通路返回None 3、dfs搜索,第二个参数传递走过的距离,到达终点时取最小输出,nonlocal关键字的使用 ''' # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param n int 顶点数 # @param m int 边数 # @param graph int二维数组 一维3个数据,表示顶点到另外一个顶点的边长度是多少 # @return int # class Solution: def findShortestPath(self , n , m , graph ): # write code here dict_t = {} for ijdis in graph: key = str(ijdis[0])+'-'+str(ijdis[1]) if key not in dict_t: dict_t[key] = ijdis[2] else: dict_t[key] = min(ijdis[2],dict_t[key]) #print(dic) def dis(i,j): key = str(i)+'-'+str(j) if key not in dict_t: return None else: return dict_t[key] #print(dis(1,2)) #print(dis(2,3)) #print(dis(3,4)) res = 0 minpath = float('inf') def search(i,res): nonlocal minpath if i==n: if res<minpath: minpath = res for j in range(1,n+1): if dis(i,j): search(j,res+dis(i,j)) search(1,res) return minpath # Solution().findShortestPath(5,5,[[1,2,2],[1,4,5],[2,3,3],[3,5,4],[4,5,5]]) # 9