1)在不改变已有订单各取送点顺序的前提下,将新订单按先取餐后送餐的顺序分别插入原来的路线中,枚举所有新路线;
2)计算新路线路程,并进行判断:每个取送点都有一个系统指定时间,若骑手到达该位置时,时间晚于系统指定时间,则该方案无效;
3)对新路线进行计算和判断后,删除此次枚举的两个插入位置,还原为初始状态,再继续进行下一次枚举;
4)在所有有效方案中,输出总路程最小的方案,若无有效方案,则输出不接单的建议。如果骑手目前无订单在派送中,则插入订单A的方案只有1种,骑手→取餐点A→送餐点A;如果骑手订单中已有1个送餐点A和1个送餐点B,则新订单C有6种插入方案:
方案I:骑手→取餐点C→送餐点C→送餐点A→送餐点B
方案Ⅱ;骑手→取餐点C→送餐点A→送餐点C→送餐点B
方案Ⅲ:骑手→取餐点C→送餐点A→送餐点B→送餐点C
方案IV:骑手→送餐点A→取餐点C→送餐点C→送餐点B
方案V:骑手→送餐点A→取餐点C→送餐点B→送餐点C
方案VI:骑手→送餐点A→送餐点B→取餐点C→送餐点C
请回答下列问题:
(1)若骑手仅剩1份餐未送(已取餐),路线为:骑手→送餐点A,新的订单出现后,有
(2)定义如下con(tim)函数进行时间格式转换,将24小时制的“时:分”转换为分,如02:30转换为150,请在划线处填上合适代码。
def con(tim):
t=
return t
(3)定义totd(riderlist,h)函数,其功能为从头指针h进入链表riderlist,按节点先后顺序计算总路程,并判断能否在系统指定时间内到达各取送点,若到达某一取送点时超时返回-1。若链表riderlist如下,
riderlist=[[“u1001”,“119.906033”,“31.014597”,“11:30”,2],
[“s”,“119.921439”,“31.023022”,“11:55”,3],
[“t”,“119.887850”,“31.022861”,“11:40”,1],
[“s”,“119.953836”,“31.021122”,“12:10”,-1]]
第1个元素中“u1001”为骑手编号,“119.906033”和“31.014597”,表示骑手实时位置,“11:30”为实时时间,2为下一节点指针,第2个元素开始,第1项若为“t”表示此元素为取餐点信息,若为“s”表示此元素为送餐点信息.调用函数totd(riderlist,h),risderlist的值如上,h为0,则加框处语句将被执行
def totd(riderlist,h):
speed=0.3 #speed为骑手每分钟公里数
total=0
pre=h
cur=riderlist[pre][4]
while

#计算pre与cur两个节点所在位置间的路程,存储在变量d中
total+=d
if total/speed>con(riderlist[cur][3])-con(riderlist[h][3]):
return-1
else:
pre=cur
cur=riderlist[pre][4]
return round(total,2)
(4)实现是否接单判断的Python部分程序如下,请在划线处填入合适的代码。
def add(oldlist,x,c):#在x所指节点后插入新节点c
c[4]=oldlist[x][4]
oldlist.append(c)
oldlist[x][4]=len(oldlist)-1
return oldlist
#读取骑手信息,存储在lit中,代码略
tc=[“t”,“119.936506”,“31.008933”,“12:05”,-1]#新订单取餐信息
sc=[“s”,“119.919839”,“31.020183”,“12:22”,-1]#新订单送餐信息
ans=[-1,-1,10000]
head=0
p=head
while p!=-1:
lit=add(lit,p,tc)
①
while q!=-1:
lit=add(lit,q,sc)
tot=totd(lit,head)
if tot!=-1 and ②
ans=[p,q,tot]
lit[q][4]=lit[lit[q][4]][4]
q=lit[q][4]
lit[p][4]=lit[lit[p][4]][4]
p=lit[p][4]
if ans[2]==10000
print(“不建议接单,不能在系统指定时间内送达。”)
else:
print(“可以接单,建议各取送点到达顺序依次为:”)
#按顺序输出各取送点代码略

同类型试题

y = sin x, x∈R, y∈[–1,1],周期为2π,函数图像以 x = (π/2) + kπ 为对称轴
y = arcsin x, x∈[–1,1], y∈[–π/2,π/2]
sin x = 0 ←→ arcsin x = 0
sin x = 1/2 ←→ arcsin x = π/6
sin x = √2/2 ←→ arcsin x = π/4
sin x = 1 ←→ arcsin x = π/2


y = sin x, x∈R, y∈[–1,1],周期为2π,函数图像以 x = (π/2) + kπ 为对称轴
y = arcsin x, x∈[–1,1], y∈[–π/2,π/2]
sin x = 0 ←→ arcsin x = 0
sin x = 1/2 ←→ arcsin x = π/6
sin x = √2/2 ←→ arcsin x = π/4
sin x = 1 ←→ arcsin x = π/2

