python深度优先搜索和广度优先搜索


Posted in Python onFebruary 07, 2018

python深度优先搜索和广度优先搜索

1. 深度优先搜索介绍

图的深度优先搜索(Depth First Search),和树的先序遍历比较类似。

它的思想:假设初始状态是图中所有顶点均未被访问,则从某个顶点v出发,首先访问该顶点,然后依次从它的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和v有路径相通的顶点都被访问到。 若此时尚有其他顶点未被访问到,则另选一个未被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止。

显然,深度优先搜索是一个递归的过程。

2. 广度优先搜索介绍

广度优先搜索算法(Breadth First Search),又称为"宽度优先搜索"或"横向优先搜索",简称BFS。

它的思想是:从图中某顶点v出发,在访问了v之后依次访问v的各个未曾访问过的邻接点,然后分别从这些邻接点出发依次访问它们的邻接点,并使得“先被访问的顶点的邻接点先于后被访问的顶点的邻接点被访问,直至图中所有已被访问的顶点的邻接点都被访问到。如果此时图中尚有顶点未被访问,则需要另选一个未曾被访问过的顶点作为新的起始点,重复上述过程,直至图中所有顶点都被访问到为止。

换句话说,广度优先搜索遍历图的过程是以v为起点,由近至远,依次访问和v有路径相通且路径长度为1,2...的顶点。

# -*- coding: utf-8 -*-
"""
Created on Wed Sep 27 00:41:25 2017
@author: my
"""
from collections import OrderedDict
class graph:
 nodes=OrderedDict({})#有序字典
 def toString(self):
 for key in self.nodes:
 print key+'邻接点为'+str(self.nodes[key].adj) 
 def add(self,data,adj,tag):
 n=Node(data,adj)
 self.nodes[tag]=n
 
 for vTag in n.adj:
 if self.nodes.has_key(vTag) and tag not in self.nodes[vTag].adj:
 self.nodes[vTag].adj.append(tag)
 visited=[]
 def dfs(self,v):
 if v not in self.visited:
 self.visited.append(v)
 print v
 for adjTag in self.nodes[v].adj:
 self.dfs(adjTag)
 visited2=[]
 def bfs(self,v): 
 queue=[]
 queue.insert(0,v)
 self.visited2.append(v)
 while(len(queue)!=0):
 top=queue[len(queue)-1]
 for temp in self.nodes[top].adj:
 if temp not in self.visited2:
  self.visited2.append(temp)
  queue.insert(0,temp)
 print top
 queue.pop()
class Node:
 data=0
 adj=[]
 def __init__(self,data,adj):
 self.data=data
 self.adj=adj
g=graph()
g.add(0,['e','c'],'a')
g.add(0,['a','g'],'b')
g.add(0,['a','e'],'c')
g.add(0,['a','f'],'d')
g.add(0,['a','c','f'],'e')
g.add(0,['d','g','e'],'f')
g.add(0,['b','f'],'g')
g.toString()
print '深度优先遍历的结构为'
g.dfs('c')
print '广度优先遍历的结构为'
g.bfs('c')
Python 相关文章推荐
Python基础教程之浅拷贝和深拷贝实例详解
Jul 15 Python
Linux-ubuntu16.04 Python3.5配置OpenCV3.2的方法
Apr 02 Python
pyspark 读取csv文件创建DataFrame的两种方法
Jun 07 Python
在PyCharm下打包*.py程序成.exe的方法
Nov 29 Python
pycharm创建一个python包方法图解
Apr 10 Python
使用django的ORM框架按月统计近一年内的数据方法
Jul 18 Python
Python 等分切分数据及规则命名的实例代码
Aug 16 Python
opencv3/Python 稠密光流calcOpticalFlowFarneback详解
Dec 11 Python
python3中datetime库,time库以及pandas中的时间函数区别与详解
Apr 16 Python
python 如何将两个实数矩阵合并为一个复数矩阵
May 19 Python
Python中else的三种使用场景
Jun 16 Python
利用Python实现模拟登录知乎
May 25 Python
Python Flask基础教程示例代码
Feb 07 #Python
Python装饰器用法实例总结
Feb 07 #Python
使用apidocJs快速生成在线文档的实例讲解
Feb 07 #Python
Python自定义线程池实现方法分析
Feb 07 #Python
使用apidoc管理RESTful风格Flask项目接口文档方法
Feb 07 #Python
Python列表推导式、字典推导式与集合推导式用法实例分析
Feb 07 #Python
浅析Python3爬虫登录模拟
Feb 07 #Python
You might like
关于Intype一些小问题的解决办法
2008/03/28 PHP
用来给图片加水印的PHP类
2008/04/09 PHP
PHP 分页原理分析,大家可以看看
2009/12/21 PHP
PHP SPL标准库之数据结构栈(SplStack)介绍
2015/05/12 PHP
PHP获取中国时间(上海时区时间)及美国时间的方法
2017/02/23 PHP
PHP单元测试配置与使用方法详解
2019/12/27 PHP
Javascript笔记一 js以及json基础使用说明
2010/05/22 Javascript
使用js在页面中绘制表格核心代码
2013/09/16 Javascript
简介JavaScript中POSITIVE_INFINITY值的使用
2015/06/05 Javascript
php基于redis处理session的方法
2016/03/14 Javascript
AngularJS ng-template寄宿方式用法分析
2016/11/07 Javascript
js+html5实现复制文字按钮
2017/07/15 Javascript
解决Jquery下拉框数据动态获取的问题
2018/01/25 jQuery
jQuery实现的电子时钟效果完整示例
2018/04/28 jQuery
JavaScript常用截取字符串的三种方式用法区别实例解析
2018/05/15 Javascript
利用Decorator如何控制Koa路由详解
2018/06/26 Javascript
jQuery使用bind动态绑定事件无效的处理方法
2018/12/11 jQuery
javascript删除数组元素的七个方法示例
2019/09/09 Javascript
原生js实现ajax请求和JSONP跨域请求操作示例
2020/03/14 Javascript
Vue3不支持Filters过滤器的问题
2020/09/24 Javascript
IDEA配置jQuery, $符号不再显示黄色波浪线的问题
2020/10/09 jQuery
使用python获取CPU和内存信息的思路与实现(linux系统)
2014/01/03 Python
Python的Flask框架中SQLAlchemy使用时的乱码问题解决
2015/11/07 Python
使用pandas对矢量化数据进行替换处理的方法
2018/04/11 Python
jupyter 使用Pillow包显示图像时inline显示方式
2020/04/24 Python
今天学到的CSS最新技术(与图片背景相关)
2012/12/24 HTML / CSS
基于css3的属性transition制作菜单导航效果
2015/09/01 HTML / CSS
布鲁明戴尔百货店:Bloomingdale’s
2016/12/21 全球购物
德国团购网站:Groupon德国
2018/03/13 全球购物
javascript实现用户必须勾选协议实例讲解
2021/03/24 Javascript
人口与计划生育目标管理责任书
2014/07/29 职场文书
司法局群众路线教育实践活动整改措施思想汇报
2014/10/13 职场文书
2014年会计人员工作总结
2014/12/10 职场文书
缅怀先烈主题班会
2015/08/14 职场文书
幼儿园教师心得体会范文
2016/01/21 职场文书
MySQL 全文检索的使用示例
2021/06/07 MySQL