力扣695. 岛屿的最大面积

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 };
浙公网安备 33010602011771号