深度优先算法

概要

来看下图的另外一个应用,深度优先算法。

深度优先,听名字就知道,一条道走到黑;然后回溯到之前的起始点,遍历下一个节点,循环。

这是我理解的,其中用到了回溯的思想,遍历节点。

例子

有个走迷宫的例子。这个就是用的深度优先。一个路口走到头,不能再往里走了,也就是没路了,然后回答起始位置,重新往下个节点,一直走到没路位置。

我觉得有点暴力的思想,遍历所有节点,一直往下,如果有路,总能找到;没路,就是走到最后也没路可走,回来了又。遍历完所有节点,结束。

看下代码,下边。

代码Python

递归写法代码模板。

递归

visited = set() 

def dfs(node, visited):
	if node in visited: # terminator
		# already visited 	
		return 
		visited.add(node) 
	
		# process current node here. 
		...
		for next_node in node.children(): 
			if next_node not in visited: 
			dfs(next_node, visited)

非递归

非递归写法

def DFS(self, tree): 	
	if tree.root is None: 		
		return [] 	
	visited, stack = [], [tree.root]	
	while stack: 		
		node = stack.pop() 		
		visited.add(node)		
		process (node) 		
		nodes = generate_related_nodes(node) 		
		stack.push(nodes) 

小结

深度优先,图的应用

深度优先,很有趣的算法;代码也很经典,都值得学习。我记得最开始学的时候,给我的印象就是一条路走到黑,然后再走下一个节点。循环。跟广度优先不一样,先遍历跟它接触的所有节点,然后下一个,下一个。也挺好理解的。其实这么看。都是挺有趣的算法,还有快慢指针等等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值