欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

创新实训十四

程序员文章站 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