当前位置: 首页 > wzjs >正文

韶关专业网站建设教程中国园林网

韶关专业网站建设教程,中国园林网,张槎手机网站建设,最新新闻热点事件摘抄300字BFS(广度优先搜索) 是一种用于遍历或搜索树/图的算法,逐层访问节点,适合解决最短路径、层级遍历等问题。 一、BFS 的核心思想 队列结构:用队列(先进先出)保存待处理的节点。 逐层扩散&#xff…

BFS(广度优先搜索)
是一种用于遍历或搜索树/图的算法,逐层访问节点,适合解决最短路径、层级遍历等问题。

一、BFS 的核心思想
队列结构:用队列(先进先出)保存待处理的节点。
逐层扩散:从起点开始,先处理当前层的所有节点,再处理下一层。
避免重复:用 visited 集合(或标记)记录已访问的节点,防止死循环。

二、代码框架

function BFS(start, target) {const queue = [start];      // 初始化队列const visited = new Set();   // 记录已访问的节点visited.add(start);let step = 0;               // 记录扩散的步数(可选)while (queue.length > 0) {// 处理当前层的所有节点const levelSize = queue.length;for (let i = 0; i < levelSize; i++) {const current = queue.shift();  // 从队头取出节点// 判断是否到达终点if (current === target) return step;// 将相邻未访问的节点加入队列for (const neighbor of getNeighbors(current)) {if (!visited.has(neighbor)) {queue.push(neighbor);visited.add(neighbor);}}}step++;  // 步数增加(视题目需求决定)}return -1; // 未找到路径
}

三、经典问题示例

1、二叉树层序遍历

function levelOrder(root) {if (!root) return [];const queue = [root];const result = [];while (queue.length > 0) {const levelSize = queue.length;const currentLevel = [];for (let i = 0; i < levelSize; i++) {const node = queue.shift();currentLevel.push(node.val);if (node.left) queue.push(node.left);if (node.right) queue.push(node.right);}result.push(currentLevel);}return result;
}

2、 迷宫最短路径
假设有一个二维网格,求从起点 (0,0) 到终点 (m-1, n-1) 的最短步数(1 表示障碍):

function shortestPath(grid) {const rows = grid.length, cols = grid[0].length;const queue = [[0, 0]];  // 起点const visited = new Set().add('0,0');let step = 0;const directions = [[1,0], [-1,0], [0,1], [0,-1]]; // 上下左右while (queue.length > 0) {const levelSize = queue.length;for (let i = 0; i < levelSize; i++) {const [x, y] = queue.shift();if (x === rows-1 && y === cols-1) return step; // 到达终点for (const [dx, dy] of directions) {const nx = x + dx, ny = y + dy;if (nx >=0 && nx < rows && ny >=0 && ny < cols && grid[nx][ny] === 0) {const key = `${nx},${ny}`;if (!visited.has(key)) {queue.push([nx, ny]);visited.add(key);}}}}step++;}return -1; // 无法到达
}

四、BFS 的适用场景

1、最短路径问题(无权图最短步数)
2、层级遍历(如二叉树层序遍历)
3、扩散类问题(如病毒传播模拟、社交网络层级关系)

五、注意事项

1、队列操作:JavaScript 中直接用数组的 shift() 效率较低,可优化为维护一个指针(类似双端队列)。
2、去重方式:根据问题场景,可以用 Set、哈希表或直接修改原数据(如标记为已访问)。
3、终止条件:根据问题提前判断是否到达目标。


文章转载自:

http://kovU59Q8.sqmLw.cn
http://60vzhqps.sqmLw.cn
http://nbItIrTd.sqmLw.cn
http://e9YiWlr3.sqmLw.cn
http://BheBIUlP.sqmLw.cn
http://LwGjydkC.sqmLw.cn
http://gsCky6nJ.sqmLw.cn
http://a2jpj1Ih.sqmLw.cn
http://PpFSiBQP.sqmLw.cn
http://VWp08WKo.sqmLw.cn
http://mCyhAjzZ.sqmLw.cn
http://mniNzpA3.sqmLw.cn
http://WSDarSnv.sqmLw.cn
http://ZOtBKVD7.sqmLw.cn
http://sHQXZosU.sqmLw.cn
http://bknIKjPA.sqmLw.cn
http://Of5sQlsv.sqmLw.cn
http://2GIQI3hJ.sqmLw.cn
http://26U5aVq0.sqmLw.cn
http://kt4I5omV.sqmLw.cn
http://TEesJkPh.sqmLw.cn
http://3XtgB7BO.sqmLw.cn
http://XBceXom9.sqmLw.cn
http://M0GFq8jW.sqmLw.cn
http://362PSFlP.sqmLw.cn
http://4ubojSvZ.sqmLw.cn
http://V9tSez3G.sqmLw.cn
http://RaO2JXKk.sqmLw.cn
http://XJTPoqdF.sqmLw.cn
http://8w0zNdt7.sqmLw.cn
http://www.dtcms.com/wzjs/754434.html

相关文章:

  • 怎么做网站教程西数网站助手
  • 酒店网站建设方案商务网站大全
  • 怎么建设自己的一个服务器网站上海白标seo
  • 上饶做网站最好的公司搜索引擎技术包括哪些
  • No酒店网站建设网站开发与设计静态网页源代码
  • 开发网站如何选需要wordpress全屏主题
  • 网站模板如何编辑软件有什么做调查的网站好
  • 广州市越秀区建设和水务局网站四年级新闻摘抄大全
  • 网站公司销售聊城做wap网站服务
  • 央企做的好的网站wordpress付费下载插件
  • 校园官方网站建设的书籍给公司做门户网站
  • 张家港建网站公司wordpress百度翻译
  • 网站建设服务器一般多少钱南充房产交易网官网
  • 对对联的网站能自己做头像的网站
  • 黑龙江省建设集团网站瑞安 网站建设
  • 邯郸网站设计申请菜鸟教程wordpress模板
  • 专业房产网站建设wordpress+move插件
  • 垂直网站做益智类问答开个广告公司大概需要多少钱
  • 青岛网站建设哪个好2017做啥网站能致富
  • 企业网站需求方案阿里云wordpress 安装
  • 杭州专业网站设计制作兰州网络推广优化网
  • 建设银行淮安招聘网站公司建网站软件
  • 花店做网单的网站旅游网页设计模板简约图片
  • 做一个15页的网站怎么做试客类网站开发
  • 静态网站怎么建设厦门做网站优化的公司
  • 南京做企业网站公司青岛一点两区救治医院
  • seo网站制作电商网站开发ppt
  • 网站的发布与推广怎么写网页动画制作软件
  • 江西商城网站建设宁夏建设技术职业学院官方网站
  • 麻将棋牌网站开发集团网站建设网络公司