package leetcode;
public class demo_200 {
public int numIslands(char[][] grid) {
int height=grid.length;
int width=grid[0].length;
int sum=0;
//记录当前值是否被访问过
int[][] visited=new int[height][width];
for(int i=0;i<height;i++) {
for(int j=0;j<width;j++) {
//当前值未被访问,且为1的情况下,总数加一
if(visited[i][j]==0&&grid[i][j]=='1') {
backtrace(visited, i, j, grid, height, width);
sum=sum+1;
}
}
}
return sum;
}
public void backtrace(int[][] visited,int i,int j,char[][] grid,int height,int width) {
//已经被访问过,或者路不通,则返回
if(visited[i][j]==1||grid[i][j]=='0') {
return ;
}
//标记已经被访问了
visited[i][j]=1;
//向左查找
if(i-1>=0) {
backtrace(visited, i-1, j, grid, height, width);
}
//向右查找
if(i+1<height) {
backtrace(visited, i+1, j, grid, height, width);
}
//向上查找
if(j-1>=0) {
backtrace(visited, i, j-1, grid, height, width);
}
//向下查找
if(j+1<width) {
backtrace(visited, i, j+1, grid, height, width);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
demo_200 demo=new demo_200();
char[][] grid= {
{'1','1','0','0','0'},
{'1','1','0','0','0'},
{'0','0','1','0','0'},
{'0','0','0','1','1'},
};
demo.numIslands(grid);
}
}