创新实训十四
程序员文章站
2024-03-25 23:37:58
...
根据分组结果推荐酒店
我们已经实现了将多个地点分组,现在根据分组结果按照之前预想的算法进行酒店推荐。
具体实现代码如下:
def multiple_locations_days(city,place,checkin_time,checkout_time):
#计算出入住总晚数
nights=night(checkin_time,checkout_time)
#计算每个地点之间的相互距离,得到距离矩阵
#判断是否有两个地点相隔较远,目前以12km为界限
maximum=12
divide=False
far=[]
place_distance=[[0 for k in range(len(place))] for k in range(len(place))]
for i in range(len(place)):
j=i
for j in range(len(place)):
place_distance[i][j]=distance(place[i],place[j])
#对称矩阵
place_distance[j][i]=place_distance[i][j]
if(place_distance[i][j]>=maximum):
far.append([i,j])
divide=True
place_distance[i][i]=0
#若不需要分组,那么推荐方法同multiple_locations,是否需要分组用是否相隔较远判断
#否则先将地点分组,每组地点距离较近,且每组地点数量不超过4
results=[]
if(divide):
#得到分组矩阵,用下标表示
group=divide_group(place_distance,far,maximum)
#分别对每一组地点进行推荐
#得到第一组地点
place_group_1=[]
for i in range(4):
if(group[0][i]!=99):
place_group_1.append(place[group[0][i]])
#计算出第一组的推荐列表
hotels_1=multiple_locations(city,place_group_1,checkin_time,checkout_time)
results.append(hotels_1)
#得到第二组地点
place_group_2=[]
for i in range(4):
if(group[1][i]!=99):
place_group_2.append(place[group[1][i]])
#计算出第二组的推荐列表
hotels_2=multiple_locations(city,place_group_2,checkin_time,checkout_time)
results.append(hotels_2)
#判断是否存在第三组
if(group[2][0]!=99):
# 得到第三组地点
place_group_3 = []
for i in range(4):
if (group[2][i] != 99):
place_group_3.append(place[group[2][i]])
# 计算出第三组的推荐列表
hotels_3 = multiple_locations(city, place_group_3, checkin_time, checkout_time)
results.append(hotels_3)
#判断是否存在第四组
if(group[3][0]!=99):
# 得到第四组地点
place_group_4 = []
for i in range(4):
if (group[3][i] != 99):
place_group_4.append(place[group[3][i]])
# 计算出第四组的推荐列表
hotels_4 = multiple_locations(city, place_group_4, checkin_time, checkout_time)
results.append(hotels_4)
else:
results=multiple_locations(city,place,checkin_time,checkout_time)
return results
上一篇: JAVA并发编程(三)——同步控制(下)
下一篇: docker安装mysql