int islandPerimeter(vector<vector<int>>& grid) {
int xlen = grid.size();
int ylen = grid[0].size();
int perimeter = 0;
for(int i = 0; i < xlen; i++) {
for(int j = 0; j < ylen; j++) {
if(grid[i][j] == 0)
continue;
if(i == 0 || (i > 0 && grid[i - 1][j] == 0))
perimeter++;
if(i + 1 == xlen || (i + 1 < xlen && grid[i + 1][j] == 0))
perimeter++;
if(j == 0 || (j > 0 && grid[i][j - 1] == 0))
perimeter++;
if(j + 1 == ylen || (j + 1 < ylen && grid[i][j + 1] == 0))
perimeter++;
}
}
return perimeter;
}
int maxAreaOfIsland(vector<vector<int>>& grid) {
int xlen = grid.size();
int ylen = grid[0].size();
int maxS = 0;
// 基于bfs的保存队列
queue<pair<int, int>> q;
for(int i = 0; i < xlen; i++) {
for(int j = 0; j < ylen; j++) {
if(grid[i][j] == 0)
continue;
// 记录当前面积
int S = 0;
q.push(pair<int, int>(i, j));
while(q.size()) {
S++;
pair<int, int> point = q.front();
q.pop();
grid[point.first][point.second] = 0;
// 上
if(point.first > 0 && grid[point.first - 1][point.second] == 1) {
q.push(pair<int, int>(point.first - 1, point.second));
grid[point.first - 1][ point.second] = 0;
}
// 下
if(point.first + 1 < xlen && grid[point.first + 1][point.second] == 1) {
q.push(pair<int, int>(point.first + 1, point.second));
grid[point.first + 1][point.second] = 0;
}
// 左
if(point.second > 0 && grid[point.first][point.second - 1] == 1) {
q.push(pair<int, int>(point.first, point.second - 1));
grid[point.first][point.second - 1] = 0;
}
// 右
if(point.second + 1 < ylen && grid[point.first][point.second + 1] == 1) {
q.push(pair<int, int>(point.first, point.second + 1));
grid[point.first][point.second + 1] = 0;
}
}
if(maxS < S) maxS = S;
}
}
return maxS;
}