注意defaultdict是一个很有用的方法,注意熟练的使用
def findItinerary(self, tickets):
"""
:type tickets: List[List[str]]
:rtype: List[str]
"""
mp = collections.defaultdict(list)
for x,y in tickets: #建立邻接表
mp[x].append(y)
path = ["JFK"]
def backtrack(start): #回溯寻找答案
if len(path) == len(tickets) + 1: #设置结束条件
return True
mp[start].sort()
for i in mp[start]:
nexts = mp[start].pop(0) #加入路径要删掉这张机票防止重复
path.append(nexts)
if backtrack(nexts): #因为只要找一个,所以找到了直接返回TRUE,结束回溯
return True
x = path.pop() #这条路径不对返回
mp[start].append(x) #机票也要返回到之前的状态
backtrack("JFK")
return path