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 for(int i = 0 ; i <grid.size(); ++ i) 9 for(int 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 };