C++:小美的送花路线

本文探讨了美团鲜花快递员小美的最短送花路线规划问题,问题中要求通过规划使得送完所有订单的总路程尽可能短。问题简化为树形结构,分析了树的存储方式,并提出了实际走过的最短路径的计算方法。源码中展示了如何使用C++实现这一算法。
摘要由CSDN通过智能技术生成

问题描述

小美是美团的一名鲜花快递员,鲜花是一种保质期非常短的商品,所以需要尽快送到客户手中,公司对于骑手的一个要求就是要规划送花的线路,使得骑手送完所有订单走的路程尽可能少。(骑手开始派送时带走了所有需要派送的花,不必每单后返回花店,路程结算是从花店出发,到送完最后一名客户为止,不计算从最后一名客户家回到花店的时间)

公司对于骑手的绩效评价是取决于两个指标,一是从花店到所有客户地址的距离之和,另一个是骑手实际走的路程。

设花店始终位于1号位置,客户共有n-1个,其编号为2~n。令dis(i,j)表示i号位置到j号位置的距离,即分别计算

在这里插入图片描述
和骑手实际所走的最短路程。

为了简化问题,我们约束这n个位置构成的是一棵树,即只有n-1条边在其中互相连接,且保证n个点彼此连通。

输入描述:
输出第一行包含一个正整数n,即花店和客户的总数。(1<=n<=30000)

接下来有n-1行,每行有三个整数u,v,w,表示在u和v之间存在一条距离为w的道路。(1<=w<=1000)
输出描述:
输出包含两个整数,中间用空格隔开,分别表示花店到所有客户地址的距离之和和骑手实际走的路程。
示例
输入
5
1 2 3
1 3 1
1 4 2
2 5 1
输出
10 10

问题分析

  1. 需要首先考虑树的存储方式
  2. 考虑到到达任一节点的路径只有一条,因此到达该节点后更新从起始点到达该节点距离
  3. 考虑到若每次都返回,则遍历整棵树走过的所有距离为所有树枝长度的2倍,因此减去最长的路径不需要返回的一次即为实际走过的最短路径

源码

  1. 考虑向量来存储树,每个节点存储到达该节点的距离和该节点的子节点向量(包含节点编号和距离)
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值