对于一个陆地格子的上下左右四条边,它被算作岛屿的周长当且仅当这条边为网格的边界或者相邻的另一个格子为水域。不需要用深度搜索,因为只有一个岛。直接遍历二维数组,从四个方向上判断一下即可。
int islandPerimeter(vector<vector<int>>& grid) {
int n = grid.size();
if (n==0) return 0;
int m = grid[0].size();
int res=0;
for (int i = 0; i < n; i++) {//for循环开启遍历,防止联通分量遗漏
for (int j = 0; j < m; j++) {
if (grid[i][j] == 1)//每一个陆地格子
{
//上
if ((i-1>=0&&grid[i-1][j]==0)||i==0)res++;//相邻的格子是水域,或者是边界
//下
if((i+1<n&&grid[i+1][j]==0)||i==n-1)res++;
//左
if ((j-1>=0&&grid[i][j-1]==0)||j==0)res++;
//右
if ((j+1<m&&grid[i][j+1]==0)||j==m-1)res++;
}
}
}
return res;
}