[LeetCode 695]島の最大面積

1. DFS 

ノードから開始して、DFSを使用してグラフをトラバースする場合、トラバースできるノードはすべて最初のノードから到達可能です。DFSは、この種の到達可能性の問題を解決するためによく使用されます。

プログラムがDFSを実装する場合は、次の問題を考慮する必要があります。

  • スタック:スタックを使用して現在のノード情報を保存し、新しいノードのトラバースが戻るときに現在のノードのトラバースを続行します。再帰スタック(再帰関数呼び出し)を使用できます。
  • マーキング:BFSと同様に、通過したノードにマークを付けることも必要です。
    1 #include <bits / stdc ++。h>
     2  名前空間std を使用 3 4 class Solution {
     5 public 6 int maxAreaOfIsland(vector <vector < int >>&grid){   
     7 int res = 0 ;
    8 forint i = 0 ; i <grid.size(); ++ i)
     9 forint j = 0 ; j <grid [ 0 ..](); ++ j)
     10            {
     11                 res = 
                                          max(dfs(grid、i、j)、res);
     12             }
     13          return res;
     14      }
     15  private 16      int dfs(vector <vector < int >>&grid、int x、int y)
     17      {
     18          if( !(X> = 0 && X <grid.size()&& Y> = 0 && Y <グリッド[ 0 ] .size()))戻り 0 ; //は、第一の配列の境界エラーを防止し、表配列を決定する
    。19          IF(グリッド[ X] [Y] == 0戻り 0 ;
     20は、          グリッド[X] [Y] =0 ; // (1)O空間の複雑さをされている還元、マークとしてグリッド[] []配列を多重
    21がある         リターン 。1 + DFS(グリッド、X、Y- 1)+ DFS(グリッド、X、Y + 1)+ DFS (グリッド、x- 1、y)+ dfs(グリッド、x + 1 、y);
     22      }
     23 };

おすすめ

転載: www.cnblogs.com/wangxf2019/p/12681500.html