图的DFS遍历(python版本)
2016-05-17 20:02
691 查看
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,即由出发节点出发多少步就不往前探测了。
相关文章推荐
- Python is和==区别
- python学习笔记,长期记录不会的知识
- python matplotlib 中文显示参数设置
- python部落刷题宝备忘(一)
- Python Enumerate
- Python笔记之NUMPY模块
- 微信公众号第三方平台开发PYTHON教程 PART 9
- python 学习笔记(1)
- 微信公众号第三方平台开发PYTHON教程 PART 8
- 微信公众号第三方平台开发PYTHON教程 PART 7
- 微信公众号第三方平台开发PYTHON教程 PART 6
- 微信公众号第三方平台开发PYTHON教程 PART 5
- python json 的使用
- 微信公众号第三方平台开发PYTHON教程 PART 4
- 微信公众号第三方平台开发PYTHON教程 PART 3
- 微信公众号第三方平台开发PYTHON教程 PART 2
- 微信公众号第三方平台开发PYTHON教程 PART 1
- Python项目之即时标记
- 利用python3的urllib.request抓取网页内容并显示中文
- 使用pudb调试python