LeetCode 695. 島嶼的最大面積 廣度優先搜尋
阿新 • • 發佈:2021-11-10
LeetCode 695. 島嶼的最大面積 廣度優先搜尋
1.題目
給你一個大小為 m x n 的二進位制矩陣 grid 。
島嶼 是由一些相鄰的 1 (代表土地) 構成的組合,這裡的「相鄰」要求兩個 1 必須在 水平或者豎直的四個方向上 相鄰。你可以假設 grid 的四個邊緣都被 0(代表水)包圍著。
島嶼的面積是島上值為 1 的單元格的數目。
計算並返回 grid 中最大的島嶼面積。如果沒有島嶼,則返回面積為 0 。
2.思路
此題同200. 島嶼數量的思路一致,對於圖中的每個點,如果為 1,則代表是一個島嶼,此時通過廣度優先搜尋,遍歷此點四個方向相連線的所有的“陸地”。遍歷過程中,我們使用一個同圖相同大小的矩陣儲存元素的訪問狀態,在遍歷時跳過以及訪問過的點。
遍歷時,如果某個點為‘1’
,且未被訪問過,代表著這個點是一個新的島嶼,在進行bfs
計算面積,每次有一個點加入,面積加1.
3.Code
class Solution { public: vector<vector<int>> visited; int res; int row; int col; int maxAreaOfIsland(vector<vector<int>>& grid) { row=grid.size(); col=grid[0].size(); vector<vector<int>> vis(row,vector<int>(col,0)); visited=vis; for(int i=0;i<row;i++){ for(int j=0;j<col;j++){ if(visited[i][j]!=1 && grid[i][j]==1){ res=max(bfs(i,j,grid),res); } } } return res; } int bfs(int i,int j,vector<vector<int>>& grid){ int cur=1; visited[i][j]=1; //下 if(i<row-1 && grid[i+1][j]==1 && visited[i+1][j]==0){ cur+=bfs(i+1,j,grid); } //上 if(i>0 && grid[i-1][j]==1 && visited[i-1][j]==0){ cur+=bfs(i-1,j,grid); } //右 if(j<col-1 && grid[i][j+1]==1 && visited[i][j+1]==0){ cur+=bfs(i,j+1,grid); } //左 if(j>0 && grid[i][j-1]==1 && visited[i][j-1]==0){ cur+=bfs(i,j-1,grid); } return cur; } };