岛屿的个数

给定一个由 '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;
}

 

posted @ 2018-07-17 18:37  onlyandonly  阅读(173)  评论(0编辑  收藏  举报