图的DFS遍历(python版本)

import networkx as nx
import matplotlib.pyplot as plt
def dfs(graph,node_start,max_step=10):
	assert max_step>=0 and node_start in graph.nodes()
	res_graph=nx.DiGraph()
	cur_step=0
	stack_list=[]
	visited={}
	print node_start
	visited[node_start]='1'
	stack_list.append(node_start)
	while len(stack_list)>0:
		cur_node=stack_list[-1]
		next_nodes=graph[cur_node].keys()
		if len(next_nodes)==0:#叶子节点要回退
			stack_list.pop()
			cur_step=cur_step-1
		else:
			if (len(set(next_nodes)-set(visited.keys()))==0 or cur_step>=max_step):
			#如果都被访问过 要回退
				stack_list.pop()
				cur_step=cur_step-1
			else:
				for i in next_nodes:
					res_graph.add_edge(cur_node,i)
					if i not in visited:
						print i
						visited[i]='1'
						stack_list.append(i)
						cur_step=cur_step+1
						break
	return res_graph

很久不写c++了,写了很久的sql,明显感觉代码能力退化了,利用python写了个DFS,思路很简单了,这里只是做个简单的记录,主要是区别在于,限制了一个step,当一个很大的图,全局遍历会很大,所以限制一个step,即由出发节点出发多少步就不往前探测了。

    原文作者:数据结构之图
    原文地址: https://blog.csdn.net/wangxin110000/article/details/51438908
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞