DFS
在程序实现 DFS 时需要考虑以下问题:
栈:用栈来保存当前节点信息,当遍历新节点返回时能够继续遍历当前节点。可以使用递归栈。
标记:和 BFS 一样同样需要对已经遍历过的节点进行标记。
var maxAreaOfIsland = function(grid) {
let m=grid.length;
if(m==0) return 0;
let n=grid[0].length;
let direction=[[-1,0],[0,-1],[1,0],[0,1]];
let maxArea=0;
for(var i=0;i<m;i++){
for(var j=0;j<n;j++){
maxArea=Math.max(maxArea,dfs(grid,i,j));
}
}
function dfs(grid,i,j){
if(i<0||i>=m||j<0||j>=n||grid[i][j]==0) return 0;
grid[i][j]=0;
var area=1;
for(var k=0;k<4;k++) area+=dfs(grid,i+direction[k][0],j+direction[k][1]);
return area;
} //这里我之所以把dfS函数放在里面,是因为想要共用全局变量m,n.
return maxArea;
};