java+深度搜索算法实例_理解这种深度优先搜索算法

我得到了一个DFS算法,它返回到目标节点的最短路径 . 它将参数作为参数(包含所有节点及其路径),起始节点,目标节点和已访问的节点列表(初始化为空) . 这是代码:

def shortestPath(graph, start, end, visited = []):

path = str(start)

if start == end:

return path

shortest = None

for node in graph.childrenOf(start):

if str(node) not in visited:

visited = visited + [str(node)]

newPath = shortestPath(graph, start, end, visited)

if newPath = None:

continue

if shortest == None or len(newPath) < shortest:

shortest = newPath

if shortest != None:

path = path + shortest

else:

path = None

return path

我理解深度优先搜索的概念,但这种递归令人难以置信 . 让我知道我的思路是否正常,我正在脱轨 .

所以基本上,当newPath被赋值时会发生递归,这当然是对shortestPath的调用 . 此时,递归一直沿着图形向下移动,直到它到达没有子节点或目标节点的节点 . 如果它到达的节点没有子节点不是目标,则忽略基本情况,并忽略整个for循环,返回值none . 那么None就是简单地传递递归链 . 如果它到达目标节点,则递归的底层实际上返回一个值(路径),该值冒泡到递归的顶部 .

那时我感到很困惑,因为“最短的”发生了什么 . 因此,每次为newPath返回实际值时,都会为shortest分配该值,但随后会将其添加到path . 但是,假设我有多个目标节点路径 . 我成功找到了第一条路径,路径等于所有newPaths / shortests的总和 . 但是,对于成功达到目标的下一次递归,路径是否只是继续添加更多newPaths?那么最终的结果是不是我可以访问目标节点而不是最短路径的每条路径的长列表?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值