携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第12天,点击查看活动详情
大家好 我是短袖撸码蒂尔尼。今天带来的是一道python的题目,来自之前我的一个朋友的课程作业,在他提交完作业之后,我搞到了原题,题目难度不大。但我好久没做过这种题目了,就在此为大家分享一下解答思路。
前文回顾
题目阐述
今天我们来看一下第四道题目:
思路阐述
其实找站点和找线路的大体方向是没有什么变化的,只不过这次是需要在找到线路的基础上进行筛选,然后打印出一条符合要求的路线。
由于需要计算路线上的距离用作比较行程,因此新建类StationDistance
class StationDistance:
def __init__(self, name, o, d):
self.name = name
self.o = o
self.d = d
self.distance = o + d
def getDistance(self):
return self.distance
def getDistanceFromOrigin(self):
return self.o
def getName(self):
return self.name
def compare(self, a):
if self.getDistance() > a.getDistance():
return a
elif self.getDistance() == a.getDistance():
if self.getDistanceFromOrigin() > a.getDistanceFromOrigin():
return a
elif self.getDistanceFromOrigin() == a.getDistanceFromOrigin():
if self.getName() > a.getName():
return a
return self
这里可以看到的我,我写了一个COMPARE的方法,用作比较两个行程直接的远近。里面包含了首站点比较,站点名称字典序比较。同时还创建了用于存储StationDistance的列表类DistanceList
# list to store StationDistance
class DistanceList:
def __init__(self):
self.list = []
def getList(self):
return self.list
def append(self, station: StationDistance):
self.list.append(station)
def getShortest(self):
l = self.getList()
res = l[0]
for i in range(1, len(l)):
res = res.compare(l[i])
return res
整体思路如下:
- 同一条线路上
- 直接算起点和终点的距离(绝对值)
- 中转站
- 计算每一个起点到中转站的距离 中转站到终点的距离
- 如果只有一个中转站 直接计算 反之: 新建类station——distance 然后在自定义类distance-list进行排序
在输出上,当站点都只在一条线路上,变化和前一篇的问题里的思路一致。 而后面其他情形的打印,思路都是直接计算距离,然后比较,方式较为直接。
elif len(l1_searchlist) + len(l2_searchlist) == 4:
distance1 = get_distance(line1, origin, destination)
distance2 = get_distance(line2, origin, destination)
if distance2 < distance1:
print_route(line2, origin, destination, True)
else:
print_route(line1, origin, destination, True)
else:
interchange_stations = find_connection(line1, line2)
if len(interchange_stations) == 0:
print("No connection found!")
elif l1_searchlist[0] == origin:
DL = DistanceList()
for station in interchange_stations:
o = get_distance(line1, origin, station)
d = get_distance(line2, station, destination)
SD = StationDistance(station, o, d)
DL.append(SD)
res = DL.getShortest().getName()
print_route(line1, origin, res, True)
print("Change at %s to %s line" % (res, line2.name))
print_route(line2, res, destination, False)
else:
DL = DistanceList()
for station in interchange_stations:
o = get_distance(line2, origin, station)
d = get_distance(line1, station, destination)
SD = StationDistance(station, o, d)
DL.append(SD)
res = DL.getShortest().getName()
print_route(line2, origin, res, True)
print("Change at %s to %s line" % (res, line1.name))
print_route(line1, res, destination, False)
好了,这就是这道简单的查找地铁线路的解题思路。
我是短袖撸码蒂尔尼
一名热爱阿森纳的前端工程师
如果本文对您有帮助,可以给一个免费的赞吗?谢谢!