队列 是一种先入先出(First In First Out , FIFO)的数据结构,其原理和现实生活中的队列完全相同。
广度优先搜索 (BFS) 能够让你找到两样东西间的最短距离。比如你需要从A地到B地,你使用地图进行搜索坐车路线,地图会默认给你一个最短路径在最前面。同时也会给你每个路线。
基础概念:
图: 模拟一组链接,比如从A到B
散列表:使用散列函数和数组创建的;(我觉得那里不太对)
散列表冲突:两个键映射到了同一个位置; 解决方式:在这个位置存储一个链表
散列函数:将输入映射到数字
- 同样的输入映射到相同的索引
- 不同的输入映射到不同的索引
- 只返回有效的索引
BFS处理节点的顺序: 创建一个队列,用于存储要检查的节点,将图的头节点开始放入队列 -> 将该节点的邻居节点放入队列中,弹出队列头节点。检查弹出节点是否是终点 ,否继续重复操作,是的话结束操作。
有个岛屿数量的题目
- 先设置一个变量记录1的数量;
- 递归查找上下左右将1变为0
/**
* @param {character[][]} grid
* @return {number}
*/
var numIslands = function(grid) {
var count = 0;
for (let i = 0; i< grid.length; i++) {
for(let j=0; j<grid[0].length; j++) {
if(grid[i][j] === "1") {
changeTurn(i,j,grid)
count++
}
}
}
return count;
};
var changeTurn = function (i,j,grid) {
if(i<0 || j<0 || i>=grid.length|| j>=grid[0].length ||grid[i][j] === 0) return;
grid[i][j] = 0
changeTurn(i-1,j,grid)
changeTurn(i,j -1 ,grid)
changeTurn(i,j +1 ,grid)
changeTurn(i+1,j,grid)
}