1. 题目来源
链接:lc463. 岛屿的周长
2. 题目说明
3. 题目解析
题目保证了只有一个岛屿,即,二维网格中仅保证存在一个连通块。那么直接遍历一遍就行了,就不需要找到所有的连通块啥的了。
如果当前点是 1,查看它上下左右四个方向的情况,如果是边界或者是 0,则贡献一条周长边。遍历完整个二维数组即可。在此设置方向数组会方便很多。
貌似这个题目是个经典的算法, F l o o d F i l l FloodFill FloodFill 算法,有兴趣可自行了解~
代码:
class Solution {
public:
int islandPerimeter(vector<vector<int>>& grid) {
int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
int res = 0;
for (int i = 0; i < grid.size(); ++i) {
for (int j = 0; j < grid[i].size(); ++j) {
if (grid[i][j] == 1) {
for (int k = 0; k < 4; ++k) {
int x = i + dx[k], y = j + dy[k];
if (x < 0 || x >= grid.size() || y < 0 || y >= grid[0].size()) res ++;
else if (grid[x][y] == 0) res ++;
}
}
}
}
return res;
}
};