leeetcode463. 岛屿的周长
挺简单的。不用dfs的解法
class Solution {
public:
int isPerimeter(vector<vector<int>>& grid,int i,int j){
if(i == -1 || i == grid.size() || j == -1 || j == grid[0].size()) return 1;
if(grid[i][j] == 0) return 1;
return 0;
}
int islandPerimeter(vector<vector<int>>& grid) {
int res = 0;
for(int i = 0;i < grid.size();++i){
for(int j = 0;j < grid[0].size();++j){
if(grid[i][j] == 1)
res = res + isPerimeter(grid,i-1,j) + isPerimeter(grid,i+1,j) + isPerimeter(grid,i,j-1) + isPerimeter(grid,i,j+1);
}
}
return res;
}
};
使用dfs解法
class Solution {
public:
int dfs(vector<vector<int>>& grid,int i,int j){
if(i == -1 || i == grid.size() || j == -1 || j == grid[0].size()) return 1;
if(grid[i][j] == 0) return 1;
if(grid[i][j] != 1) return 0;
grid[i][j] = 2;
return dfs(grid,i-1,j) + dfs(grid,i+1,j) + dfs(grid,i,j-1) + dfs(grid,i,j+1);
}
int islandPerimeter(vector<vector<int>>& grid) {
for(int i = 0;i < grid.size();++i){
for(int j = 0;j < grid[0].size();++j){
if(grid[i][j] == 1) // 题目限制只有一个岛屿,计算一个即可
return dfs(grid,i,j);
}
}
return 0;
}
};