iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >深度优先和广度优先的Python实现
  • 373
分享到

深度优先和广度优先的Python实现

广度深度Python 2023-01-31 01:01:36 373人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

#coding=utf-8 class Gragh(): def __init__(self,nodes,sides): ''' nodes 表示点 sides 表示边

#coding=utf-8 
class Gragh():
    def __init__(self,nodes,sides):
        '''
        nodes 表示点
        sides 表示边

        '''
        # self.sequense是字典,key是点,value是与key相连接的点
        self.sequense = {}
        # self.side是临时变量,主要用于保存与指定点相连接的点
        self.side=[]
        for node in nodes:
            for side in sides:
                u,v=side
                # 指定点与另一个点在同一个边中,则说明这个点与指定点是相连接的点,则需要将这个点放到self.side中
                if node ==u:
                    self.side.append(v)
                elif node == v:
                    self.side.append(u)
            self.sequense[node] = self.side
            self.side=[]
        #print self.sequense


    '''
    # Depth-First-Search 
        深度优先算法,是一种用于遍历或搜索树或图的算法。沿着树的深度遍历树的节点,尽可能深的搜索树的分支。
        当节点v的所在边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。
        这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,
        则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。属于盲目搜索。        
    '''
    def DFS(self,node0):
        #queue本质上是堆栈,用来存放需要进行遍历的数据
        #order里面存放的是具体的访问路径
        queue,order=[],[]
        #首先将初始遍历的节点放到queue中,表示将要从这个点开始遍历
        queue.append(node0)
        while queue:
            #从queue中pop出点v,然后从v点开始遍历了,所以可以将这个点pop出,然后将其放入order中
            #这里才是最有用的地方,pop()表示弹出栈顶,由于下面的for循环不断的访问子节点,并将子节点压入堆栈,
            #也就保证了每次的栈顶弹出的顺序是下面的节点
            v = queue.pop()
            order.append(v)
            #这里开始遍历v的子节点
            for w in self.sequense[v]:
                #w既不属于queue也不属于order,意味着这个点没被访问过,所以讲起放到queue中,然后后续进行访问
                if w not in order and w not in queue: 
                    queue.append(w)
        return order

    '''
     readth-First-Search
     BFS是从根节点开始,沿着树的宽度遍历树的节点。如果所有节点均被访问,则算法中止。
           广度优先搜索的实现一般采用open-closed表。
    '''
    def BFS(self,node0):
        #queue本质上是堆栈,用来存放需要进行遍历的数据
        #order里面存放的是具体的访问路径
        queue,order = [],[]
        #首先将初始遍历的节点放到queue中,表示将要从这个点开始遍历
        # 由于是广度优先,也就是先访问初始节点的所有的子节点,所以可以
        queue.append(node0)
        order.append(node0)
        while queue:
            #queue.pop(0)意味着是队列的方式出元素,就是先进先出,而下面的for循环将节点v的所有子节点
            #放到queue中,所以queue.pop(0)就实现了每次访问都是先将元素的子节点访问完毕,而不是优先叶子节点
            v = queue.pop(0)
            for w in self.sequense[v]:
                if w not in order:
                    # 这里可以直接order.append(w) 因为广度优先就是先访问节点的所有下级子节点,所以可以
                    # 将self.sequense[v]的值直接全部先给到order
                    order.append(w)
                    queue.append(w)
        return order




def main():  
    nodes = [i+1 for i in xrange(8)]

    sides=[(1, 2),
        (1, 3),
        (2, 4),
        (2, 5),
        (4, 8),
        (5, 8),
        (3, 6),
        (3, 7),
        (6, 7)]
    G = Gragh(nodes,sides)
    print G.DFS(1)
    print G.BFS(1)
    print G.DFS1(1)

if __name__ == "__main__":
    main() 

--结束END--

本文标题: 深度优先和广度优先的Python实现

本文链接: https://www.lsjlt.com/news/184503.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 深度优先和广度优先的Python实现
    #coding=utf-8 class Gragh(): def __init__(self,nodes,sides): ''' nodes 表示点 sides 表示边 ...
    99+
    2023-01-31
    广度 深度 Python
  • Java实现深度优先搜索(DFS)和广度优先搜索(BFS)算法
    目录一.深度优先遍历和广度优先遍历1.深度优先遍历2.广度优先遍历二.图像渲染1.题目描述2.问题分析3代码实现1.广度优先遍历2.深度优先遍历三.岛屿的最大面积1.题目描述2.问题...
    99+
    2023-05-18
    Java深度优先和广度优先 Java深度优先 Java广度优先
  • Java中深度优先与广度优先的示例分析
    这篇文章给大家分享的是有关Java中深度优先与广度优先的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. 客户端开发...
    99+
    2023-05-30
    java
  • Java如何实现基于图的深度优先搜索和广度优先搜索
    这篇文章将为大家详细讲解有关Java如何实现基于图的深度优先搜索和广度优先搜索,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.新建一个表示“无向图”类NoDirectionGraphpackage&nb...
    99+
    2023-05-30
    java
  • Java遍历树深度优先和广度优先的方法是什么
    这篇文章主要介绍了Java遍历树深度优先和广度优先的方法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java遍历树深度优先和广度优先的方法是什么文章都会有所收获,下面我们一起来看看吧。在编程生活中,我们...
    99+
    2023-07-05
  • Python实现图的广度和深度优先路径搜索算法
    目录前言1. 图理论1.1 图的概念1.2 定义图1.3 图的抽象数据结构2. 图的存储实现2.1 邻接矩阵2.2 编码实现邻接矩阵3. 搜索路径3.1 广度优先搜索3.2 深度优先...
    99+
    2024-04-02
  • Python 算法基础篇:深度优先搜索( DFS )和广度优先搜索( BFS )
    Python 算法基础篇:深度优先搜索( DFS )和广度优先搜索( BFS ) 引言 1. 深度优先搜索( DFS )算法概述2. 深度优先搜索( DFS )算法实现实例1:图的 DFS 遍...
    99+
    2023-10-04
    深度优先 算法 python 广度优先
  • Java分别利用深度优先和广度优先求解迷宫路径
    目录深度优先实现效果示例代码广度优先实现效果示例代码知识点总结深度优先 实现效果 示例代码 import java.awt.*; import javax.swing.*; p...
    99+
    2024-04-02
  • JavaScript中深度优先遍历和广度优先遍历算法的示例分析
    这篇文章主要为大家展示了“JavaScript中深度优先遍历和广度优先遍历算法的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript中深度...
    99+
    2024-04-02
  • 简单谈谈Java遍历树深度优先和广度优先的操作方式
    目录1、深度优先2、广度优先在编程生活中,我们总会遇见树性结构,这几天刚好需要对树形结构操作,就记录下自己的操作方式以及过程。现在假设有一颗这样树,(是不是二叉树都没关系,原理都是一...
    99+
    2023-03-24
    java遍历树形数据 java如何遍历树 Java遍历树形结构
  • Python怎么实现图的广度和深度优先路径搜索算法
    本篇内容主要讲解“Python怎么实现图的广度和深度优先路径搜索算法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python怎么实现图的广度和深度优先路径搜索算法”吧!前言图是一种抽象数据结构...
    99+
    2023-06-30
  • C++实现广度优先遍历图
    本文实例为大家分享了C++实现广度优先遍历图的具体代码,供大家参考,具体内容如下 广度优先遍历 void bfs(int start, int parent[], int di...
    99+
    2024-04-02
  • 调试广度优先搜索 (BFS) 的实现
    php小编柚子为您介绍调试广度优先搜索(BFS)的实现。广度优先搜索是一种用于图和树的遍历算法,它从起始节点开始,逐层地访问相邻节点,直到找到目标节点。在实现BFS算法时,调试是非常重...
    99+
    2024-02-10
  • Java中怎么实现广度优先遍历
    今天小编给大家分享一下Java中怎么实现广度优先遍历的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。什么是广度优先广度就是扩展...
    99+
    2023-06-29
  • go语言编程学习实现图的广度与深度优先搜索
    目录图的实现BFSDFS图的实现 所谓图就是节点及其连接关系的集合。所以可以通过一个一维数组表示节点,外加一个二维数组表示节点之间的关系。 //图的矩阵实现 typedef st...
    99+
    2024-04-02
  • 怎么理解Java优先遍历和广度优先遍历算法
    这篇文章主要讲解了“怎么理解Java优先遍历和广度优先遍历算法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解Java优先遍历和广度优先遍历算法”吧!深度优先遍历主要思路是从图中一个未...
    99+
    2023-06-16
  • Java实现广度优先遍历的示例详解
    目录什么是广度优先一个简单的例子程序实现总结什么是广度优先 广度就是扩展开,广度优先的意思就是尽量扩展开。所以在算法实现的时候,就是一个循环遍历枚举每一个邻接点。其基本思路就是按层扩...
    99+
    2024-04-02
  • java广度优先算法是什么
    Java广度优先算法是一种用于图的遍历的算法。广度优先搜索(BFS)是一种基于队列的搜索算法,用于在图或树数据结构中遍历或搜索。该算...
    99+
    2023-08-11
    java
  • python迷宫问题深度优先遍历实例
    一、迷宫介绍 用python解迷宫问题,迷宫是一个二维列表,本次用深度优先解开迷宫问题。定义起点和终点,从一个位置到下一个位置只能通过向上或下或左或右,走一步来实现,从起点出发,如...
    99+
    2024-04-02
  • 【Python | 边学边敲边记】第二次:深度&&广度优先算法
    一、前言以后尽量每天更新一篇,也是自己的一个学习打卡!加油!今天给大家分享的是,Python里深度/广度优先算法介绍及实现。二、深度、广度优先算法简介1.深度优先搜索(DepthFirstSearch)深度优先搜索的主要特征就是,假设一个顶...
    99+
    2023-06-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作