leetcode:106. 岛屿的周长
题目
题目描述
给定一个由 1(陆地)和 0(水)组成的矩阵,岛屿是被水包围,并且通过水平方向或垂直方向上相邻的陆地连接而成的。
你可以假设矩阵外均被水包围。在矩阵中恰好拥有一个岛屿,假设组成岛屿的陆地边长都为 1,请计算岛屿的周长。岛屿内部没有水域。
输入描述
第一行包含两个整数 N, M,表示矩阵的行数和列数。之后 N 行,每行包含 M 个数字,数字为 1 或者 0,表示岛屿的单元格。
输出描述
输出一个整数,表示岛屿的周长。
思路
求周长很容易看出来,对于每个小方格而言,他的四周如果是0或者超出边界说明这里有一条边。
/*
计算岛屿的周长
*/
#include <bits/stdc++.h>
using namespace std;// 对于一个陆地1而言,它的四周,只要是0或者超出边界,那就是周长的一部分int dir[4][2] = {-1, 0, 0, -1, 1, 0, 0, 1};int main()
{int n, m;cin >> n >> m;int perimeter = 0;vector<vector<int>> grid(n, vector<int>(m, 0));for (int i = 0; i < n; i++){for (int j = 0; j < m; j++){cin >> grid[i][j];}}for (int i = 0; i < n; i++){for (int j = 0; j < m; j++){if (grid[i][j] == 1){for (int k = 0; k < 4; k++){int nexti = i + dir[k][0];int nextj = j + dir[k][1];if (grid[nexti][nextj] == 0 || nexti < 0 || nexti >= n || nextj < 0 || nextj >= m)perimeter++;}}}}cout << perimeter << endl;return 0;
}
总结
没用到dfs
参考资料
代码随想录