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

imatge

/** * 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

imatge

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

imatge

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

imatge

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) } } }