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中的Numpy入门教程
Apr 26 Python
Python3基础之list列表实例解析
Aug 13 Python
数组保存为txt, npy, csv 文件, 数组遍历enumerate的方法
Jul 09 Python
详解python里的命名规范
Jul 16 Python
Python sklearn KFold 生成交叉验证数据集的方法
Dec 11 Python
Python实现将通信达.day文件读取为DataFrame
Dec 22 Python
Python图像滤波处理操作示例【基于ImageFilter类】
Jan 03 Python
Scrapy-Redis结合POST请求获取数据的方法示例
May 07 Python
pytorch中使用cuda扩展的实现示例
Feb 12 Python
python之语音识别speech模块
Sep 09 Python
Visual Studio Code搭建django项目的方法步骤
Sep 17 Python
关于PyCharm安装后修改路径名称使其可重新打开的问题
Oct 20 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
php curl选项列表(超详细)
2013/07/01 PHP
PHP中数据库单例模式的实现代码分享
2014/08/21 PHP
THINKPHP内容分页代码分享
2015/01/14 PHP
Eclipse PHPEclipse 配置的具体步骤
2017/08/08 PHP
浅析PHP7 的垃圾回收机制
2019/09/06 PHP
表单提交验证类
2006/07/14 Javascript
如何在Web页面上直接打开、编辑、创建Office文档
2007/03/12 Javascript
javascript框架设计之浏览器的嗅探和特征侦测
2015/06/23 Javascript
ionic实现可滑动的tab选项卡切换效果
2020/04/15 Javascript
jQuery simpleModal插件的使用介绍
2016/08/30 Javascript
jquery购物车结算功能实现方法
2020/10/29 Javascript
vue-cli webpack 引入swiper的操作方法
2018/09/15 Javascript
Vue项目pdf(base64)转图片遇到的问题及解决方法
2018/10/19 Javascript
Vue实现购物车的全选、单选、显示商品价格代码实例
2019/05/06 Javascript
微信小程序实现滑动翻页效果(完整代码)
2019/12/06 Javascript
ESLint 是如何检查 .vue 文件的
2020/11/30 Vue.js
[50:50]完美世界DOTA2联赛PWL S3 Galaxy Racer vs Phoenix 第一场 12.10
2020/12/13 DOTA
简单介绍Python中的decode()方法的使用
2015/05/18 Python
Python3使用requests登录人人影视网站的方法
2016/05/11 Python
Python中print和return的作用及区别解析
2019/05/05 Python
Python实现爬取亚马逊数据并打印出Excel文件操作示例
2019/05/16 Python
python将类似json的数据存储到MySQL中的实例
2019/07/12 Python
Windows10下 python3.7 安装 facenet的教程
2019/09/10 Python
Python使用Tkinter实现转盘抽奖器的步骤详解
2020/01/06 Python
HTML5 FormData 方法介绍以及实现文件上传示例
2017/09/12 HTML / CSS
世界上最大的糖果店:Dylan’s Candy Bar
2017/11/07 全球购物
美国伊甸园兄弟种子公司:Eden Brothers
2018/07/01 全球购物
Made in Design德国:设计师家具、灯具和装饰
2019/10/31 全球购物
员工年终演讲稿
2014/01/03 职场文书
好人好事事迹材料
2014/02/12 职场文书
2014年入党积极分子党课学习心得体会模板
2014/04/03 职场文书
2014年母亲节演讲稿范文
2014/05/07 职场文书
《周恩来的四个昼夜》观后思想汇报范文两篇
2014/09/10 职场文书
婚礼长辈答谢词
2015/09/29 职场文书
golang中的空slice案例
2021/04/27 Golang
经典《舰娘》游改全新动画预告 预定11月开播
2022/04/01 日漫