路径最少停车次数
无人车充满电后跑一段距离电会耗光,停止后使用太阳能板充电后才能继续跑。而且由于疫情,无人车在经过仓库时,一定会停止接收检查。并且不同型号车跑的最远距离是不同的。
第一行输入n,为仓库个数
接下来n-1行输入u,v,d,表示仓库u到v的直通距离为d。
接下来几行,每行输入e,r,m,表示车计划从e仓到r仓,且使用车型充满电后每次最远跑m距离。对于每次给出的路径方案,求出最少停车次数。
class Graph(object):
def __init__(self,n):
self.n=n
self.edges={}
for i in range(n+1):
self.edges[i]=[]
self.matrix=[[float('inf')]*(n+1) for _ in range(n+1)]
self.roadRes=[]
def GraphMatrix(self,Start,End,Distance):
self.matrix[Start][End]=Distance
self.matrix[End][Start]=Distance
def Connect(self,Start,End,Distance):
self.edges[Start].append([End,Distance])
self.edges[End].append([Start,Distance])
self.GraphMatrix(Start,End,Distance)
def getPath(self,u,v,road):
#使用深度优先搜索获取目标路径
if u==v:
self.roadRes.append(road)
return
for edge in self.edges[u]:
nextNode=edge[0]
nextDistance=edge[1]
if nextNode in road:
continue
else:
self.getPath(nextNode,v,road+[nextNode])
if __name__=='__main__':
n=6
subRoads=[[1,2,1],[2,3,2],[2,4,3],[4,6,5],[4,5,4]]
#n-1条边,不需要考虑闭环,两点间有且仅有一条路径
graph=Graph(n)
for e in subRoads:
graph.Connect(e[0],e[1],e[2])
planRoad=[[1,4,1],[2,6,1]]
for e in planRoad:
printRes=0
graph.getPath(e[0],e[1],[e[0]])
aimRoad=graph.roadRes[0]#求解两点间的目标路径
print( aimRoad)
for i in range(len(aimRoad)-1):
printRes=printRes+graph.matrix[aimRoad[i]][aimRoad[i+1]]//e[2]+1#对每段子路径,计算停车次数
printRes-=1
print(printRes)
graph.roadRes=[]#再次清空目标路径
自己跑的测试用例可以过,但是可能会存在没有考虑周全的地方,如有不足欢迎指正。