目录

  • 模板
  • 542.01矩阵
  • 529.扫雷游戏
  • 2146.价格范围内最高排名的k样物品

模板

542.01矩阵

class Solution:def updateMatrix(self, matrix) :m, n = len(matrix), len(matrix[0])dp = [[0] * n for _ in range(m)]zeroes_pos = [(i, j) for i in range(m) for j in range(n) if matrix[i][j] == 0]# 将所有的 0 添加进初始队列中q = collections.deque(zeroes_pos)print(q)seen = set(zeroes_pos)print(seen)# 广度优先搜索while q:i, j = q.popleft()for ni, nj in [(i - 1, j), (i + 1, j), (i, j - 1), (i, j + 1)]:if 0 <= ni < m and 0 <= nj < n and (ni, nj) not in seen:dp[ni][nj] = dp[i][j] + 1q.append((ni, nj))seen.add((ni, nj))return dp

529.扫雷游戏

#Bfs
class Solution:def updateBoard(self, board, click) :i, j = clickrow, col = len(board), len(board[0])if board[i][j] == "M":board[i][j] = "X"return board# 计算空白块周围的地雷def cal(i, j):res = 0for x in [1, -1, 0]:for y in [1, -1, 0]:if x == 0 and y == 0: continueif 0 <= i + x < row and 0 <= j + y < col and board[i + x][j + y] == "M": res += 1return resdef bfs(i, j):queue = collections.deque([[i, j]])print(queue)while queue:i, j = queue.pop()num = cal(i, j)if num > 0:board[i][j] = str(num)continueboard[i][j] = "B"for x in [-1, 1, 0]:for y in [-1, 1, 0]:if x == 0 and y == 0: continuenxt_i, nxt_j = i + x, j + yif 0 <= nxt_i < row and 0 <= nxt_j < col and board[nxt_i][nxt_j] == "E":queue.appendleft([nxt_i, nxt_j])board[nxt_i][nxt_j] = "B"bfs(i, j)return board

2146.价格范围内最高排名的k样物品

class Solution:def highestRankedKItems(self, grid, pricing, start, k):ans = []m, n = len(grid), len(grid[0])low, high = pricings_x, s_y = startvis = {(s_x, s_y)}q = [(s_x, s_y)]dirs = ((-1, 0), (1, 0), (0, -1), (0, 1))#优先级1,步数优先,先递归的步数小while q:  # 分层 BFS# 优先级2,同一步数,数值小优先q.sort(key=lambda p: (grid[p[0]][p[1]], p))ans.extend(p for p in q if low <= grid[p[0]][p[1]] <= high)if len(ans) >= k:return ans[:k]tmp = qq = []#更新搜索空间for p in tmp:for d in dirs:x, y = p[0] + d[0], p[1] + d[1]if 0 <= x < m and 0 <= y < n and grid[x][y] and (x, y) not in vis:vis.add((x, y))q.append((x, y))return ans

数据结构与算法——广度搜索BFS相关推荐

  1. 【算法】深度搜索(DFS) 和 广度搜索(BFS)

    深度搜索(DFS) 点:然后退回到该顶点,搜索其它路径,直到以该顶点为始点的所有路径的顶点都被访问,深度搜索算法是递归算法,因为对于没一个节点来说,执行的是同样的操作.  简单来说,深度搜素算法就是一 ...

  2. 深度搜索(DFS)和广度搜索(BFS)

    深度搜索(DFS) 一.搜索方法:  沿出发顶点的第一条路径尽量深入,遍历路径上所有顶点:然后退回到该顶点,搜索其它路径,直到以该顶点为始点的所有路径的顶点都被访问,深度搜索算法是递归算法,因为对于没 ...

  3. 数据结构与算法——广度和深度优先搜索

    1. 概论 前面说到了图这种非线性的数据结构,并且我使用了代码,简单演示了图是如何实现的.今天就来看看基于图的两种搜索算法,分别是广度优先搜索和深度优先搜索算法,这两个算法都十分的常见,在平常的面试当 ...

  4. js数据结构与算法 图的BFS和DFS

    本文为技术学习的笔记-<Learning JavaScript Data Structures and Algorithms, Third Edition> 1.图的相关术语 图是网络结构 ...

  5. python【数据结构与算法】搜索初探

    文章目录 1 前言 2 回溯算法 2.1 DFS 3 BFS 3.1 伪码描述 4 Presentation of Code 4.1 深搜-stack实现 4.2 广搜-queue实现 5 总结 1 ...

  6. 【数据结构和算法】广度优先BFS遍历图(树的层序遍历的拓展)

    目录 ○树的层次遍历: 题:leetcode102: 广度优先优先遍历: 代码模板(来源:labuladong算法小抄): 图的广度优先遍历是树的层次遍历的拓展 ○树的层次遍历: 按照数的高度从上到下 ...

  7. JavaScript数据结构与算法(2)(集合、字典、哈希表、二叉树、图)(ES6)

    注意:原教学视频:JavaScript(ES6)数据结构和算法 | JavaScript数据结构与算法 (都是CoderWhy老师的教学) 原作者(笔记)链接:JavaScript 数据结构与算法 | ...

  8. 【人工智能】八数码问题:广度搜索、深度搜索

    应用广度搜索BFS和深度搜索DFS解决八数码问题,广度搜索和深度搜索都是盲目搜索,相关理论知识,算法过程:问题求解:状态空间图和盲目搜索. 参考:7种方法求解八数码问题 Python实现A*算法解决N ...

  9. 广度优先搜索(BFS)——抓住那头牛(POJ 4001)

    本文将以(POJ 4001)抓住那头牛 为例,讲解经典算法广度优先搜索(BFS)的STL写法 在实际写算法中,怎么能不使用更快.更方便.更准确.更高效的C++ STL模板呢 相信很多人都了解过广度优先 ...

最新文章

  1. 【组队学习】【34期】Python(一级)
  2. Linux底层函数库“glibc”再现重大安全漏洞
  3. Linux strace 跟踪进程信息
  4. python第四十一天---作业:简单FTP
  5. 中间件业务在网易轻舟容器平台的性能调优实践
  6. 如何修复修复损坏的TAU G2的.u2文件
  7. PW Live 直播 | 北邮博士生纪厚业:异质图神经网络之模型和应用
  8. 你这么爱打游戏,怎么不去做游戏测试呢?
  9. mysql录入foreigen错误_编译安装MySQL5.6失败的相关问题解决方案
  10. 如何查询SAP C4C创建日期大于某日的所有lead数据
  11. 移动pc常用Meta标签
  12. js符号转码_JS 字符串编码函数(解决URL特殊字符传递问题):escape()、encodeURI()、encodeURIComponent()区别详解...
  13. php js对话框,JavaScript_js弹出框、对话框、提示框、弹窗实现方法总结(推荐),一、JS的三种最常见的对话框- phpStudy...
  14. C# 中 NPOI 库读写 Excel 文件的方法【摘】
  15. xml学习中的趣事一件----嘿嘿!
  16. 六道腾讯、百度、美团常爱问的面试智力题和答案
  17. 【STM32H7的DSP教程】第46章 STM32H7的IIR带通滤波器实现(支持逐个数据的实时滤波)
  18. 有效管理“刺头”员工的方法
  19. 记录为了使用Wechaty安装docker 中的一些问题
  20. python 图灵机器人

热门文章

  1. python高阶函数(三分钟读懂)
  2. glibc版本查看_[译] 写一个简单的内存分配器(替换glibc中的malloc函数)
  3. 命令行cmd跳转到其他地址
  4. 《南溪的目标检测学习笔记》——neck组件的设计笔记
  5. 目标检测——感受野的学习笔记
  6. 图像处理——双线性插值(Bilinear Interpolation)
  7. ubuntu 安装 最新 OpenBabel
  8. 【PAT】1001 害死人不偿命的(3n+1)猜想
  9. c/c++入门教程 - 2.4.7 多态、函数地址晚绑定(重写,虚函数,纯虚函数,抽象类,虚析构,纯虚析构)
  10. c/c++教程 - 1.4 数据类型 sizeof