python算法与数据结构(搜索算法和拓扑排序算法)---广度优先搜索和拓扑排序

广度优先搜索BFS

定义&基本内容

广度优先是按照层次由近及远的进行搜索,在当前层次所有可及节点都搜索完毕后才会继续往下搜索,其本质就是寻找从起点到终点的最短路程。

树的广度优先搜索

树的广度优先遍历,可以看成是层序遍历。

访问顺序如图:

图的广度优先搜索

有向图:边存在方向的图;

  • 有向图中度分为入度(in-degree)和出度(out-degree)
  • 入度:表示有多少条边指向这个顶点;
  • 出度:表示有多少条边是以这个顶点为起点指向其他节点。

往往被用在最短路径的场景中。

从节点A开始广度优先遍历。

  • 步骤1,访问A
  • 步骤2,访问A的出边的顶点B
  • 步骤3,访问B的出边顶点C/ E /F
  • 步骤4,访问E的出边顶点D
  • 步骤5,访问F的出边的顶点G

访问步骤:

A - B - C - E - F - D - G

力扣题目实例

200. 岛屿数量

https://leetcode.cn/problems/number-of-islands/description/


深度优先搜索解法:
python算法与数据结构(搜索算法和拓扑排序算法)---深度优先搜索

python 复制代码
class Solution:
   def numIslands(self, grid: List[List[str]]) -> int:
        def bfs(grid, i, j, rows, cols):
            queue = [[i, j]]
            while queue:
                [i, j] = queue.pop(0) 
                if 0 <= i <=  rows - 1 and 0 <= j <= cols - 1 and grid[i][j] == "1":
                   grid[i][j] = '0'
                   queue += [[i+1, j], [i-1, j], [i, j-1], [i, j+1]]
        
        
        # 获取二维数组的行数和列数
        rows = len(grid)
        cols = len(grid[0])

        res = 0
        for i in range(rows):
            for j in range(cols):
                # 只有确认时岛屿,才会遍历
                if grid[i][j] == '0':
                    continue
                res += 1
                bfs(grid, i, j, rows, cols)
        
        return res
相关推荐
彧azz2 小时前
图的存储结构详解:邻接矩阵的原理、实现与应用
开发语言·数据结构·学习·php
老王熬夜敲代码2 小时前
BLAKE3:最快的密码学哈希函数
算法·密码学·哈希算法
hansang_IR2 小时前
【题解】P4460 [CQOI2018] 解锁屏幕
c++·算法
见闻小天地2 小时前
简博斯JG-C系列彩色激光同轴位移计:摄像头模组对位与行程测量的技术价值观察
人工智能·算法
葫三生3 小时前
《论三生原理》神话学构想与“神话历史”理论、《古史中的神话》思路异同?
大数据·人工智能·科技·深度学习·算法
2601_962300813 小时前
机器学习贴士:使用Python编写MapReduce
hadoop·python·机器学习·mapreduce·数据处理
liliangcsdn4 小时前
因子分析指标概念与示例
算法·机器学习
xyz_CDragon4 小时前
GitHub上4个爆款AI开源Skill:拍照后不用P图,用Codex一键生成高级海报(附效果图+使用教程)
人工智能·python·github·codex·skill
weixin199701080164 小时前
[特殊字符]《跨境二手ERP对接Back Market:标准化API + 7~10工作日技术合规审核实录》(附Python源码)
开发语言·python·pandas
持敬chijing4 小时前
Python-数据类型-列表
开发语言·python·青少年编程