200. 岛屿数量
给你一个由?'1'
(陆地)和?'0'
(水)组成的的二维网格,请你计算网格中岛屿的数量。
岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。
此外,你可以假设该网格的四条边均被水包围。
示例 1:
输入:grid = [ ["1","1","1","1","0"], ["1","1","0","1","0"], ["1","1","0","0","0"], ["0","0","0","0","0"] ] 输出:1
示例 2:
输入:grid = [ ["1","1","0","0","0"], ["1","1","0","0","0"], ["0","0","1","0","0"], ["0","0","0","1","1"] ] 输出:3
提示:
m == grid.length
n == grid[i].length
1 <= m, n <= 300
grid[i][j]
?的值为?'0'
?或?'1'
?
void run(vector<vector<char>>& grid,vector<vector<bool>>&visited,int i,int j)
? ? {
? ? ? ? if(i<0 || j<0)
? ? ? ? {
? ? ? ? ? ? return;
? ? ? ? }
? ? ? ? if(i>=grid.size() || j>=grid[0].size())
? ? ? ? {
? ? ? ? ? ? return;
? ? ? ? }
? ? ? ? if(true == visited[i][j])
? ? ? ? {
? ? ? ? ? ? return;
? ? ? ? }
? ? ? ? visited[i][j]=true;
? ? ? ? if(grid[i][j] == '0')
? ? ? ? {
? ? ? ? ? ? return;
? ? ? ? }
? ? ? ? //up
? ? ? ? run( grid,visited,i+1,j);
? ? ? ? run( grid,visited,i-1,j);
? ? ? ? run( grid,visited,i,j+1);
? ? ? ? run( grid,visited,i,j-1);
? ? }
? ? int numIslands(vector<vector<char>>& grid) {
? ? ? ? int row = grid.size();
? ? ? ? int col = grid[0].size();
? ? ? ? vector<vector<bool>>visited(row,vector<bool>(col,false));
? ? ? ? int ret=0;
? ? ? ? for(int i=0;i<row;i++)
? ? ? ? {
? ? ? ? ? ? for(int j=0;j<col;j++)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? if(grid[i][j] == '0' || true ==visited[i][j])
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? continue;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ret++;
? ? ? ? ? ? ? ? run( grid,visited,i,j);
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? return ret;
? ? }
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!