emmmm这题最后没做出来。一开始是想用bfs来做的,bfs写出来了,发现找路径不会,琢磨一会后,找路径写出来了,发现不像树结构,这里是有可能有两个父节点的。弄了半天,总是不对。后来只好参考别人的答案,发现用dfs更加直观点。附代码
hint:
此题做了好长时间,关键是对dfs和bfs不熟悉,好久不用,每次做这种题都不太想做,就想做无脑的题,emmmm后来发现真正有用的就是那些自己不会的题目,cheer up.
做题时,试图像C++一样用全局变量没成功,发现python可以把函数写在另一个函数里面。
发现无论是dfs还是bfs,他们的思想都一样,不是像我之前想的那样记录每个节点的前置节点,然后通过递归的方式得到最后的路径,而是每次往下走的时候,都会实时地记录路径,将最后到达target的路径保存到结果当中。
class Solution:
def allPathsSourceTarget(self, graph):
"""
:type graph: List[List[int]]
:rtype: List[List[int]]
"""
target = len(graph)-1
result = []
def dfs(source,target,past):
if source == target:
result.append(past)
else:
if len(graph[source]) == 0:
return None
for each in graph[source]:
temp = past.copy()
temp.append(each)
dfs(each,target,temp)
dfs(0,target,[0])
return result