1. 題目
2. 解題思路(DFS)
以迭代中遇到的1爲起點向四周進行深度優先搜索,把搜索過的位置置0
3. 代碼
class Solution {
public:
int maxAreaOfIsland(vector<vector<int>>& grid) {
int max_ans = 0;
// 在矩陣中按行搜索 1
for(int i = 0; i < grid.size(); i++){
for(int j = 0; j < grid[0].size(); j++){
// 若找到,則以該位置爲起點,向四周進行深度優先搜索相連位置
if(grid[i][j]){
// cout<<i<<" "<<j<<" "<<grid[i][j]<<" "<<max_ans<<endl;
int temp = dfs(i, j, 0, grid);
if(temp > max_ans){
max_ans = temp;
} // 記錄島嶼大小
}
}
}
return max_ans;
}
int dfs(int i, int j, int size, vector<vector<int>>& grid){
// 越界判斷 * 1判斷
if(i >= 0 && j >= 0 && i < grid.size() && j < grid[0].size() && grid[i][j]){
// 面積加1 * 位置置0 標記已搜索
size += 1; grid[i][j] = 0;
// cout<<"="<<i<<" "<<j<<" "<<grid[i][j]<<" "<<size<<endl;
// 向四周搜索
size = dfs(i - 1, j, size, grid);
size = dfs(i + 1, j, size, grid);
size = dfs(i, j - 1, size, grid);
size = dfs(i, j + 1, size, grid);
}
return size;
}
};