var numIslands = function(grid) {
let res=0
for(let i=0;i<grid.length;i++){
for(let j=0;j<grid[0].length;j++){
if(grid[i][j]==='1'){
res++
turnZero(i,j,grid)
}
}
}
return res
};
const turnZero=(i,j,grid)=>{
if(i>=grid.length || i<0 || j>=grid[0].length || j<0 || grid[i][j]==='0')return
grid[i][j]='0'
turnZero(i-1,j,grid)
turnZero(i,j-1,grid)
turnZero(i+1,j,grid)
turnZero(i,j+1,grid)
}
var maxAreaOfIsland = function(grid) {
const res=[]
for(let i=0;i<grid.length;i++){
for(let j=0;j<grid[0].length;j++){
if(grid[i][j]===1){
let area=countArea(i,j,0,grid)
res.push(area)
}
}
}
return Math.max(...res)<0?0:Math.max(...res)
};
const countArea=(i,j,area,grid)=>{
grid[i][j]=0
if(i+1<grid.length && grid[i+1][j]===1)area=countArea(i+1,j,area,grid)
if(j+1<grid[0].length && grid[i][j+1]===1)area=countArea(i,j+1,area,grid)
if(i-1>=0 && grid[i-1][j]===1)area=countArea(i-1,j,area,grid)
if(j-1>=0 && grid[i][j-1]===1)area=countArea(i,j-1,area,grid)
return area+1
}
var isBipartite = function(graph) {
const traverse=(graph,v)=>{
if(!flag)return
visited[v]=true
for(let k of graph[v]){
if(!visited[k]){
color[k]=!color[v]
traverse(graph,k)
}else{
if(color[k]===color[v]){
flag=false
}
}
}
}
let flag=true
const n=graph.length
const visited=new Array(n).fill(false)
const color=new Array(n).fill(false)
for(let i=0;i<n;i++){
if(!visited[i]){
traverse(graph,i)
}
}
return flag
};