“抢单”是外卖骑手的日常,当外卖平台上一个新的订单出现时,骑手需要在短时间内考虑是否抢单。平台根据骑手的实际信息,给出是否抢单的建议,若建议抢单则给出到达各个取送点的顺序。平台判断是否抢单的算法设计如下:
1)在不改变已有订单各取送点顺序的前提下,将新订单按先取餐后送餐的顺序分别插入原来的路线中,枚举所有新路线。
2)计算新路线路程,并进行判断:每个取送点都有一个系统指定时间,若骑手到达该位置时,时间晚于系统指定时间,则该方案无效。
3)对新路线进行计算和判断后,删除此次枚举的两个插入位置,还原为初始状态,再继续进行下一次枚举。
4)在所有有效方案中,输出总路程最小的方案,若无有效方案,则输出不接单的建议。如果骑手目前无订单在派送中,则插入订单A的方案只有1种,骑手→取餐点A→送餐点A;如果骑手订单中已有1个送餐点A和1个送餐点B,则新订单C有6种插入方案:
方案Ⅰ:骑手→取餐点C→送餐点C→送餐点A→送餐点B
方案Ⅱ;骑手→取餐点C→送餐点A→送餐点C→送餐点B
方案Ⅲ:骑手→取餐点C→送餐点A→送餐点B→送餐点C
方案Ⅳ:骑手→送餐点A→取餐点C→送餐点C→送餐点B
方案Ⅴ:骑手→送餐点A→取餐点C→送餐点B→送餐点C
方案Ⅵ:骑手→送餐点A→送餐点B→取餐点C→送餐点C
请回答下列问题:
(1)若骑手仅剩1份餐未送(已取餐),路线为:骑手→送餐点A,新的订单出现后,有 33(填数字)种插入方案。
(2)定义如下con(tim)函数进行时间格式转换,将24小时制的“时:分”转换为分,如02:30转换为150,请在划线处填上合适代码。

(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,则加框处语句将被执行 44次,若将此条件语句改为riderlist[pre][4]!=-1,不影响不影响(选填:影响/不影响)程序执行。

(4)实现是否接单判断的Python部分程序如下,请在划线处填入合适的代码。

【考点】Python语言编程环境.
【答案】3;4;不影响
【解答】
【点评】
声明:本试题解析著作权属菁优网所有,未经书面同意,不得复制发布。
发布:2024/7/17 8:0:9组卷:1引用:1难度:0.5
相似题
-
1.现有一个m*n的迷宫矩阵 maze(如图 a),矩阵中有空格子(用1表示,可通行)和墙(用0表示,不可通行);在迷宫中通行的每一步移动操作,你可以往上,下,左或者右方向移动一个格子(不能进入墙所在的格子)。
你的目标是找到离entry(入口)最近的出口,并规划入口到出口的行走路径。(出口的含义是 maze边界上的空格子。entry格子不算出口)。如果不存在这样的路径,请你返回-1;如果有,则展示entry到出口的行走路径。
程序在正常执行后,运行结果如图b所示:
●寻找最近出口位置的思路与算法:
预设:0墙 1空格子 2已探索
在广度优先搜索的过程中,我们在队列中保存[cx,cy,d]三元素列表,其中(cx,cy)为当前的行列坐标,d为当前坐标相对入口的距离(即需要移动的步数)。
当我们遍历至(cx,cy)时,我们枚举它上下左右的相邻坐标(nx,ny)。此时可能有三种情况:
①(nx,ny)不属于迷宫坐标或为墙,此时无需进行任何操作;
②(nx,ny)为迷宫的出口(在迷宫边界且不为墙),此时应返回 nx,ny,d+1,即该出口的坐标以及相对入口的距离作为答案。
③(nx,ny)为空格子且不为出口,此时应将新坐标设置为已探索,并将其对应的三元素列表[nx,ny,d+1]加入队列。
最终,如果不存在到达出口的路径,我们返回-1作为答案。
1、若迷宫数据为maze=[[0,0,0,0,0],[1,1,1,1,0],[0,1,0,1,1],[0,1,1,1,0],[0,0,0,0,0]],则最少移动步数为
2、请将以下的程序代码,补充完整。发布:2025/1/2 10:30:2组卷:1引用:1难度:0.4 -
2.又到植树的季节,大人和小孩共100个,需要种100棵树,每个大人每天能种3棵树,三个小孩每天能合种1棵树,大人小孩至少都有1位参加,问大人和小孩各有几个,正好一天完成这个任务?
(1)大人和小孩个数最合理的范围是
A.大人:5到33,小孩:1到99
B.大人:1到33,小孩:1到291
C.大人:1到33,小孩:3到99
D.大人:1到33,小孩:3到291
(2)设大人为a,小孩为b,匹配这个需求的条件是
A.a*3+b/3=100 and a+b=100
B.a*3+b/3=100 or a+b=100
C.a/3+b*3=100 and a+b=100
D.a/+b*3=100 or a+b=100
(3)算法的初始化部分已在提供的程序中完成。请在指定区域内编写程序,完成题目要求的功能。完成VB程序的编写,输出符合条件的人数组合。(注意:程序编写正确才能得分)Dim a As Integer,b As Integer 发布:2025/1/2 11:30:1组卷:1引用:1难度:0.3 -
3.查找与替换。从键盘上分别输入要查找和替换的字符串,对文本文件进行查找与替换,替换后保存到新的文本文件中。完成查找与替换功能的思路是:首先可从待检索文本文件“in.jye.ai”逐行读取文本内容到列表text,然后从键盘上输入查找的字符串key和替换的字符串new,对列表text中的元素逐个进行查找并替换,结果保存到列表result,最后将result 写入文件“out.jye.ai”。
(1)主程序。
text=readfile(“in.jye.ai“)#读入文件
key=input(“请输入要查找的字符串:“)
new=input(“请输入要替换的字符串:“)
result=[]
for line in text:
newline=replace(key,new,line)#替换
result.append(newline)#添加到列表
writefile(“out.jye.ai“,result)#写入文件
该程序段采用的算法是
(2)读写文本文件,如下的readfile函数,逐行读取文本文件数据存入列表并返回。请在横线处填入合适的代码。
def readfile(filename):
f=open(filename,encoding=“utf-8“)#打开文件
text=[]
line=f.readline( )#从文件中读取一行
while line:
text.jye.ai(line)#添加到列表
line=f.readline( )
f.jye.ai( )
return
def writefile(filename,text):
#将text写入filename文件,代码略
(3)查找字符串,如下的findstr函数,在字符串line中从begin位置开始查找key在字符串line中的位置,请在横线处填入合适的代码。
def findstr(key,line,begin):
for i in range(begin,len(line)-len(key)+1):
if :
return i
return-1
(4)替换字符串。如下的replace函数,在字符串line中检索所有的字符串key并替换为new,请在横线处填入合适的代码。
def replace(key,new,line):
begin=0
while begin<len(line)-len(key)+1:
pos=findstr(key,line,begin)
if pos==-1:
else:
line=line[0:pos]+new+line[pos+len(key):len(line)]
begin=pos+len(key)
return line发布:2025/1/2 10:30:2组卷:0引用:2难度:0.3