命题: 来自不同地方的人们去同一个地方,需要安排他们的飞机行程,希望同一天在纽约会面,同时在同一天返回。要求总成本最小。
航班样例数据如下:
起点,终点,起飞时间,到达时间,价格
LGA,OMA,6:19,8:13,239
OMA,LGA,6:11,8:31,249
LGA,OMA,8:04,10:59,136
OMA,LGA,7:39,10:24,219
LGA,OMA,9:31,11:43,210
OMA,LGA,9:15,12:03,99
LGA,OMA,11:07,13:24,171
OMA,LGA,11:08,13:07,175
LGA,OMA,12:31,14:02,234
OMA,LGA,12:18,14:56,172
LGA,OMA,14:05,15:47,226
OMA,LGA,13:37,15:08,250
LGA,OMA,15:07,17:21,129
OMA,LGA,15:03,16:42,135
LGA,OMA,16:35,18:56,144
OMA,LGA,16:51,19:09,147
LGA,OMA,18:25,20:34,205
OMA,LGA,18:12,20:17,242
LGA,OMA,20:05,21:44,172
OMA,LGA,20:05,22:06,261
……..
import time
import random
import numpy as np
#创建每个人对应的出发城市
people = [('Seymour', 'BOS'),
('Franny', 'DAL'),
('Zooey', 'CAK'),
('Walt', 'MIA'),
('Buddy', 'ORD'),
('Les', 'OMA')]
# 定义目的地
destination = 'LGA'
#定义一个函数解析原始数据txt文件
flights = {}
def extract_file(filename):
flights = {}
for line in open(filename):
origin, dest, depart, arrive, price = line.strip().split(',')
flights.setdefault((origin, dest), [])
flights[(origin, dest)].append((depart, arrive, int(price)))
return flights
flights = extract_file('schedule.txt')
list(flights.keys())[0]
Out[277]: (‘LGA’, ‘DAL’)
[python3不支持字典索引,先转成list]
(http://blog.csdn.net/a070220106/article/details/9089379)
#定义一个方便获取分钟数的函数
def getminutes(t):
x = time.strptime(t, '%H:%M')
return x[3] * 60 + x[4]
#定义打印出题解对应的人员航班信息的函数
def printschedule(r):
for d in range(int(len(r) / 2)):
name = people[d][0]
origin = people[d][1]
out = flights[(origin, destination)][(r[d])]
ret = flights[(destination, origin)][(r[d + 1])]
print('%10s%10s %5s-%5s $%3s %5s-%5s $%3s' % (name, origin,
out[0], out[1], out[2], ret[0], ret[1], ret[2]))
s = [1, 4, 3, 2, 7, 3, 6, 3, 2, 4, 5, 3]
printschedule(s)
Seymour BOS 8:04-10:11 9512:08−14:05 95 12