岛屿的个数
给定一个由 '1'
(陆地)和 '0'
(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。
示例 1:
输入: 11110 11010 11000 00000 输出: 1
示例 2:
输入: 11000 11000 00100 00011 输出: 3
一个简单的DFS,当碰到未访问过的陆地时,将其标为访问过,然后向四周搜索,直到四周都是水为止。这时陆地数加1,再对剩余未访问过的陆地进行DFS。
void DFS(char** grid,int** visited,int x,int y,int m,int n) { if(x<0||x==m||y<0||y==n) return ; if(visited[x][y]||grid[x][y]!='1') return ; visited[x][y]=1; DFS(grid,visited,x+1,y,m,n); DFS(grid,visited,x-1,y,m,n); DFS(grid,visited,x,y+1,m,n); DFS(grid,visited,x,y-1,m,n); } int numIslands(char** grid, int gridRowSize, int gridColSize) { static int visited[gridRowSize][gridColSize]; int i,j; int lands=0; for(i=0;i<gridRowSize;i++) for(j=0;j<gridColSize;j++) visited[i][j]=0; for(i=0;i<gridRowSize;i++) for(j=0;j<gridColSize;j++) { if(grid[i][j]=='1'&&!visited[i][j]) { DFS(grid,visited,i,j,gridRowSize,gridColSize); lands++; } } return lands; }