力扣695. 岛屿的最大面积

image

 BFS写法:

 1 class Solution {
 2 public:
 3     typedef pair<int, int> pii;
 4     map<pii, bool> visited;
 5     vector<vector<int>> grid;
 6     int orientation[8] = {1, 0, -1, 0, 0, 1, 0 ,-1};
 7     int n, m;
 8     int result = 0;
 9     void bfs(vector<pii> nxt, int area) {
10         if (nxt.empty()) {
11             result = max(result, area);
12             return;
13         }
14         vector<pii> v; //此处最好使用全局的双端队列,可以节省很多空间
15         for (auto i : nxt) {
16             for (int j = 0; j < size(orientation) / 2; ++j) {
17                 int x = i.first + orientation[j * 2], y = i.second + orientation[j * 2 + 1];
18                 if (x >= 0 && x < n && y >= 0 && y < m) {
19                     pii temp = make_pair(x, y);
20                     if (grid[x][y] == 1 && !visited[temp]) {
21                         v.push_back(temp);
22                         visited[temp] = true;
23                         area++;
24                     }
25                 }
26             }
27         }
28         bfs(v, area);
29     }
30     int maxAreaOfIsland(vector<vector<int>>& grid) {
31          this -> grid = grid;
32          n = grid.size();
33          m = grid[0].size();
34          for (int i = 0; i < n; ++i) {
35             for (int j = 0; j < m; ++j) {
36                 pii temp = make_pair(i, j);
37                 if (grid[i][j] == 1 && !visited[temp]) {
38                     visited[temp] = true;
39                     bfs({temp}, 1);
40                 }
41             }
42          }
43          return result;
44     }
45 };

 

posted on 2025-09-03 00:40  Coder何  阅读(3)  评论(0)    收藏  举报