活动安排问题

活动安排问题_第1张图片
活动安排问题_第2张图片

核心思想:

先找出最早结束的活动,作为开始的启动项,然后循环查找与上一次活动结束时间最为接近的下一次活动的开始时间

代码:

def activity_arrange(S, F):
    # 活动数量
    n = len(S)
    # 存放最大限度活动安排的列表
    arr = list()
    # 先寻找最早结束的活动,并以此作为启动项
    arr.append(F.index(min(F))+1)
    # 寻找下一次活动的开始时间比较项
    temp_end = min(F)
    # 当仍存在活动开始时间晚于当前活动结束时间时,表示仍有活动可以安排
    while temp_end <= max(S):
        # 比较列表,存储可安排当作下一个活动的活动列表
        temp = list()
        # 寻找可安排活动
        for i in range(n):
            differ = S[i] - temp_end
            if differ>0:
                # 将可安排活动的序号和开始时间一起存入列表
                temp.append([i, S[i]])
        temp = sorted(temp, key=lambda x: x[-1])
        # 找出距离上一次活动结束时间最接近的活动, 并添加进安排
        arr.append(temp[0][0]+1)
        # 将这次活动的结束时间作为比较项,再进行下一次活动的寻找
        temp_end = F[temp[0][0]]
    return arr



if __name__ == '__main__':
    S = [1, 3, 0, 5, 3, 5, 6, 8, 8, 2, 12]
    F = [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
    print(activity_arrange(S, F))

你可能感兴趣的:(算法,python,贪心算法)