【正确答案】对于这种题目,一般而言可以使用拓扑排序进行解答。根据车票信息构建一个图,然后找出这张图的拓扑排序序列,这个序列就是旅程的路线。但这种方法的效率不高,它的时间复杂度为O(N)。这里重点介绍另外一种更加简单的方法:hash法(python中可以使用字典实现)。主要的思路为根据车票信息构建一个字典,然后从这个字典中找到整个旅程的起点,接着就可以从起点出发依次找到下一站,进而知道终点。具体的实现思路为:
(1)根据车票的出发地与目的地构建字典。
Tickets={("西安"到"成都"),("北京"到"上海"),("大连"到"西安"),("上海"到"大连")}
(2)构建Tickets的逆向字典如下(将旅程的起始点反向):
ReverseTickets={("成都"到"西安"),("上海"到"北京"),("西安"到"大连"),("大连"到"上海")}
(3)遍历Tickets,对于遍历到的key值,判断这个值是否在ReverseTickets中的key中存在,如果不存在,那么说明遍历到的Tickets中的key值就是旅途的起点。例如:“北京”在ReverseTickets的key中不存在,因此“北京”就是旅途的起点。
实现代码如下:
def printResult(inputs):
#用来存储把input的键与值调换后的信息
reverseInput=dict()
for k,v in inputs.items():
reverseInput[v]=k
start=None
#找到起点
for k,v in inputs.items():
if k not in reverseInput:
start=k
break
if start==None:
print "输入不合理"
return
#从起点出发按照顺序遍历路径
to=inputs[start]
print start+"->"+to,
stan=to
to=inputs[to]
while to!=None:
print ","+Start+"->"+to,
start=to
to=inputs[to]
if __name__=="__main__":
inputs=dict()
inputs["西安"]="成都"
inputs["北京"]="上海"
inputs["大连"]="西安"
inputs["上海"]="大连"
printResult(inputs)
程序的运行结果为:
北京->上海, 上海->大连, 大连->西安, 西安->成都
算法性能分析:
这种方法的时间复杂度为O(N),空间复杂度也为O(N)。
【答案解析】[考点] 如何从给定的车票中找出旅程。