路径最少停车次数

路径最少停车次数

无人车充满电后跑一段距离电会耗光,停止后使用太阳能板充电后才能继续跑。而且由于疫情,无人车在经过仓库时,一定会停止接收检查。并且不同型号车跑的最远距离是不同的。
第一行输入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=[]#再次清空目标路径

自己跑的测试用例可以过,但是可能会存在没有考虑周全的地方,如有不足欢迎指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值