Hice la implementación sin usar la matriz visitada que funciona bien, pero para hacer el número de islas sin cambiar la matriz de entrada, he usado la matriz visitada, la respuesta es 4 pero me está dando el resultado como 3 del siguiente código
let grid=[['0','1','0'],['1','0','1'],['0','1','0']]; let visited=Array(grid.length).fill(Array(grid[0].length).fill(false)); let islands=0; let check = (i,j) =>{ if(i>=grid.length || j>=grid[0].length || i<0 || j<0 || visited[i][j] || grid[i][j]==='0') return 0; visited[i][j]=true; check(i+1,j); check(i,j+1); check(i-1,j); check(i,j-1); }; for(let i=0;i<grid.length;i++) for(let j=0;j<grid[0].length;j++) if(grid[i][j]==='1' && !visited[i][j]){ islands++; check(i,j); } return islands;Si defino la matriz visitada como una de las siguientes, su código parece funcionar
visited=[[false,false,false],[false,false,false],[false,false,false]];o siguiendo usando ¿Cómo llenar una matriz multidimensional en javascript?
function createAndFillTwoDArray({ rows, columns, defaultValue }){ return Array.from({ length:rows }, () => ( Array.from({ length:columns }, ()=> defaultValue) )) } var visited = createAndFillTwoDArray({rows:3, columns:3, defaultValue: false});