import random class Path(): def __init__(self, path, cost): self.__path = path self.__cost = cost # 获取路径上最后一个节点(T) def getLastNode(self): return self.__path[-1] # 获取路径的只读属性 @property def path(self): #这个函数有什么用 return self.__path # 判断node是否为最后一个节点 def isLastNode(self, node): return node == self.getLastNode() # 增加节点和成本 def addNode(self, node, price): return Path(self.__path+[node], self.__cost+price) # 输出当前路径 def printPath(self): for n in self.__path: if self.isLastNode(n): print(n) else: print(n, end="-->") print("Cost is: "+str(self.__cost)) # 获取成本的只读属性 @property def travelCost(self): return self.__cost class DirectedGraph(): def __init__(self,d): self.__graph = d def __generatePath(self, graph, path, end, results, costIndex): current = path.getLastNode() if current == end: results.append(path) else: for n in graph[current]: if n not in path.path: self.__generatePath(graph, path.addNode(n, self.__graph[path.getLastNode()][n][costIndex]), end , results, costIndex) # 搜索start到end之间时间或空间的最短路径,并输出 def searchPath(self, start, end): self._results = [] self.__generatePath(self.__graph, Path([start], 0), end,self._results) self._results.sort(key=lambda x: len(x)) # 调用searchPath搜索start到end之间空间最短的路径,并输出 def searchMinPath(self, start, end): self.searchPath(start, end) print("共有{}条路径".format(len(self._results))) # 计算路径数 for path in self._results: #print(path) distance = 0 light_points=0 time = 0 for i in range(len(path) - 1): point1 = self.__graph[path[i]] point2 = point1[path[i + 1]] distance += point2[0] time += (point2[0]/point2[1]) light_points+=point2[2] path.append(distance) path.append(light_points)
时间: 2024-01-13 09:02:15 浏览: 66
dbf.rar_arcgis_arcgis python_site:www.pudn.com
这段代码定义了两个类:`Path`和`DirectedGraph`。其中,`Path`类用于表示图中的一个路径,`DirectedGraph`类用于表示有向图。
`Path`类有以下方法:
- `__init__(self, path, cost)`:类的构造函数,用于初始化路径和成本。
- `getLastNode(self)`:获取路径上最后一个节点。
- `path(self)`:获取路径的只读属性。
- `isLastNode(self, node)`:判断node是否为最后一个节点。
- `addNode(self, node, price)`:增加节点和成本。
- `printPath(self)`:输出当前路径。
- `travelCost(self)`:获取成本的只读属性。
`DirectedGraph`类有以下方法:
- `__init__(self,d)`:类的构造函数,用于初始化有向图。
- `__generatePath(self, graph, path, end, results, costIndex)`:生成从起点到终点的所有路径。
- `searchPath(self, start, end)`:搜索从起点到终点的所有路径,并将结果存储在`_results`列表中。
- `searchMinPath(self, start, end)`:搜索从起点到终点的所有路径,并输出最短路径的长度和路径上的节点。
在`searchMinPath`方法中,首先调用`searchPath`方法搜索从起点到终点的所有路径,并将结果存储在`_results`列表中。然后,对于每一条路径,遍历路径上相邻的两个节点,计算两个节点之间的距离、时间和灯光点数,并将这些信息存储在路径对象中。最后,输出所有路径的数量和最短路径的长度和路径上的节点。
阅读全文