记住DFS的两个要点:递归+安全带;
而BFS没有这些,而是借助一个stack数组。
1.DFS
var numIslands = function(grid) {
var m=grid.length;
if(m===0) return 0;
var n=grid[0].length;
var count=0;
for(var i=0;i<m;i++){
for(var j=0;j<n;j++){
if(grid[i][j]==='1'){
dfs(i,j);
count++;
}
}
}
return count;
function dfs(i,j){
if(i<0||i>=m||j<0||j>=n||grid[i][j]==='0') return;
grid[i][j]='0';
dfs(i-1,j);
dfs(i+1,j);
dfs(i,j-1);
dfs(i,j+1);
}
};
2.BFS
var numIslands = function(grid) {
var m=grid.length;
if(m===0) return 0;
var n=grid[0].length;
var count=0;
for(var i=0;i<m;i++){
for(var j=0;j<n;j++){
if(grid[i][j]==='1'){
bfs(i,j);
count++;
}
}
}
return count;
function bfs(i,j){
var stack=[];
stack.push([i,j]);
while(stack.length!==0){
var cur=stack.shift();
var x=cur[0],y=cur[1];
if(x>=0&&x<m&&y>=0&&y<n&&grid[x][y]==='1'){
grid[x][y]='0';
stack.push([x-1,y],[x+1,y],[x,y-1],[x,y+1]);
}
}
}
};