DFS
The Time complexity of BFS is O(V + E) when Adjacency List is used and O(V^2) when Adjacency Matrix is used, where V stands for vertices and E stands for edges.
The idea:
Base on the current situation to recursive decide further status, and so on. until all the unrevealed status is decided.
So, for most of the cases, we must have a firmed status, and we base on that status to derive all the other unknown status. and so on, until we have all the answers.
public void mainQuestion(char[][] grid) {
int m = grid.length;
if(m == 0) return 0;
int n = grid[0].length;
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
if(/*grid[i][j] is firmed status*/){
dfs(grid, i, j);
}
}
}
}
public void dfs(char[][] grid, int i, int j){
//some region/leagality check
if(i < 0 || j < 0 || i >= grid.length
|| j >= grid[0].length || grid[i][j] == '0') return;
//set that to visied(ie. decided)
grid[i][j] = '0';
//derive to unknown status
dfs(grid, i-1, j);
dfs(grid, i+1, j);
dfs(grid, i, j-1);
dfs(grid, i, j+1);
}
int[][] dirs = new int[][]{{0,1}, {1,0}, {0,-1}, {-1,0}};
DFS思路
推演的過程中要告訴我們什麼?
狀態的更新 (global variable)
lca
deepest
推演的過程需要什麼 (input of dfs)
子問題的答案 (return value)
node 的子孫裡最底層的leaf 深度
結算 (要在推演前or後面?)
Last updated
Was this helpful?