Temes de BFS i DFS a LeetCode
Bfs Dfs Topics Leetcode
Temes de BFS i DFS a LeetCode
Primer amplada de BFS , S'expandeix segons la capa Primer profunditat DFS , És 'una manera d'anar al negre'.
Si es tracta d'un problema de l'enèsima potència de 2, la complexitat temporal de BFS és l'enèsima potència de 2 i la complexitat temporal de DFS és n.
En general, utilitzeu BFS per resoldre el problema del camí més curt del laberint Això es deu al fet que el DFS pot arribar al punt final després d'un cercle gran quan arriba al punt final.
BFS
1. Hi ha molt espai, creix exponencial
2. No hi ha risc d’explosió de pila, l’espai sol·licitat és l’espai munt
3. Pot cercar el camí més curt o el més petit
DFS
1. L’espai és proporcional a la profunditat
2. Hi ha un risc d'explosió de pila, com ara quan la profunditat de l'arbre és massa gran
3. No es pot cercar el camí més curt i el més petit
111. Profunditat mínima de l’arbre binari
/** * Definition for a binary tree node. * struct TreeNode { * int val * TreeNode *left * TreeNode *right * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * } */ class Solution { public: int minDepth(TreeNode* root) { if(!root) return 0 int left = minDepth(root->left) int right = minDepth(root->right) if(!left&&right) return right+1 if(!right&&left) return left+1 return min(left,right)+1 } }
279. Quadrat perfecte
class Solution { public: int numSquares(int n) { queue<int> q vector<int> dist(n+1,INT_MAX) q.push(0) dist[0] = 0 while(q.size()){ int t=q.front() q.pop() if(t==n) return dist[t] for(int i=1i*i+t<=ni++){ int j=t+i*i if(dist[j]>dist[t]+1){ dist[j]=dist[t]+1 q.push(j) } } } return 0 } }
733. Representació d’imatges
class Solution { public: vector<vector<int>> floodFill(vector<vector<int>>& image, int sr, int sc, int newColor) { if(image.empty()||image[0].empty()) return image int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1} int oldColor = image[sr][sc] if(oldColor==newColor) return image image[sr][sc] = newColor for(int i=0i<4i++){ int x=sr+dx[i],y=sc+dy[i] if(x>=0&&x<image.size()&&y>=0&&y<image[0].size()&&image[x][y]==oldColor){ floodFill(image,x,y,newColor) } } return image } }
200. Nombre d’illes
class Solution { public: int m,n int numIslands(vector<vector<char>>& grid) { if(grid.empty()||grid[0].empty()) return 0 n = grid.size(),m=grid[0].size() int res=0 for(int i=0i<ni++){ for(int j=0j<mj++){ if(grid[i][j]=='1'){ res++ dfs(grid,i,j) } } } return res } void dfs(vector<vector<char>>& grid,int x,int y){ int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1} grid[x][y]='0' for(int i=0i<4i++){ int a=x+dx[i],b=y+dy[i] if(a>=0 && a<n && b>=0 && b<m && grid[a][b]=='1') dfs(grid,a,b) } } }