DFS
DFS 深度优先遍历用于解决可达性问题
在程序实现 DFS 时需要考虑以下问题:
- 栈:用栈来保存当前节点信息,当遍历新节点返回时能够继续遍历当前节点。可以使用递归栈。
- 标记:和 BFS 一样同样需要对已经遍历过的节点进行标记。
岛屿的最大面积
var m=0, n=0;
var direction = [[0, 1], [0, -1], [1,0], [-1, 0]]
function dfs(grid,r,c){
if (r < 0 || r >= m || c < 0 || c >= n || grid[r][c] == 0) {
return 0;
}
grid[r][c] = 0; //置为0代表访问过
let area = 1;
for (let d=0;d<direction.length;d++) {
area += dfs(grid, r + direction[d][0], c + direction[d][1]);
}
return area;
}
var maxAreaOfIsland = function(grid) {
if (grid == null || grid.length == 0) {
return 0;
}
m = grid.length;
n = grid[0].length;
let maxArea = 0;
for (let i = 0; i < m; i++) {
for (let j = 0; j < n; j++) {
maxArea = Math.max(maxArea, dfs(grid, i, j));
}
}
return maxArea;
};
547朋友圈
var n=0
function dfs( M, i, hasVisited) {
hasVisited[i] = true;
for (var k = 0; k < n; k++) {
if (M[i][k] == 1 && !hasVisited[k])
{
dfs(M, k, hasVisited);
}
}
}
var findCircleNum = function(M) {
n = M.length;
let circleNum = 0;
let hasVisited = new Array(n).fill(false);
for (var i = 0; i < n; i++) {
if (!hasVisited[i]) {
dfs(M, i, hasVisited);
circleNum++;
}
}
return circleNum;
};

浙公网安备 33010602011771号