当前位置: 首页> 财经> 股票 > 兰州疫情为什么如此严重_动态网页制作的工具有哪些_河南网站关键词优化_淘宝客推广一天80单

兰州疫情为什么如此严重_动态网页制作的工具有哪些_河南网站关键词优化_淘宝客推广一天80单

时间:2025/7/8 18:57:02来源:https://blog.csdn.net/2301_79691881/article/details/142703119 浏览次数:0次
兰州疫情为什么如此严重_动态网页制作的工具有哪些_河南网站关键词优化_淘宝客推广一天80单

✨✨✨学习的道路很枯燥,希望我们能并肩走下来!

文章目录

目录

文章目录

前言

一  floodfill算法是什么?

二  相关OJ题练习

2.1  图像渲染 

 2.2  岛屿数量

 2.3  岛屿的最大面积

2.4   被围绕的区域

 2.5  太平洋大西洋水流问题

 2.6  扫雷游戏

 2.7  衣橱整理(原:面试题 13. 机器人的运动范围 )

总结


前言

本篇详细介绍了进一步介绍floodfill算法,让使用者对floodfill算法有更加深刻的认知,而不是仅仅停留在表面,更好的模拟,为了更好的使用. 文章可能出现错误,如有请在评论区指正,让我们一起交流,共同进步!


一  floodfill算法是什么?

洪水填充(也称为种子填充)是一种算法,用于确定连接到多维数组中给定节点的区域。

可以用dfs或者bfs来作为基础,我们这里用DFS

 floodfill的本质是搜索找到性质相同的一个连通块(区域)

二  相关OJ题练习

2.1  图像渲染 

733. 图像渲染 - 力扣(LeetCode)

 

class Solution {int dx[4] = {1,-1,0,0};int dy[4] = {0,0,1,-1};int m,n,prev;
public:vector<vector<int>> floodFill(vector<vector<int>>& image, int sr, int sc, int color) {if(image[sr][sc] == color)  return image;prev = image[sr][sc];m = image.size(),n = image[0].size();dfs(image,sr,sc,color);return image;}void dfs(vector<vector<int>>& image, int i, int j, int color){image[i][j] = color;for(int k = 0; k < 4;k++){int x = i + dx[k], y = j + dy[k];if(x >=0 && x < m && y >= 0 && y < n && image[x][y] == prev){dfs(image,x,y,color);}}}
};

 2.2  岛屿数量

200. 岛屿数量 - 力扣(LeetCode)

 

class Solution {int dx[4] = {0,0,1,-1};int dy[4] = {1,-1,0,0};int ret,m,n;bool vis[301][301];
public:int numIslands(vector<vector<char>>& grid) {m = grid.size(),n = grid[0].size();for(int i = 0;i<m;i++){for(int j = 0;j<n;j++){if(grid[i][j] == '1' && !vis[i][j]){dfs(grid,i,j);ret++;}}}return ret;}void dfs(vector<vector<char>>& grid,int i,int j){vis[i][j] = true;for(int k = 0;k<4;k++){int x = i + dx[k], y = j + dy[k];if(x >=0 && x < m && y >= 0 && y < n && grid[x][y] == '1' && !vis[x][y]){vis[x][y] = true;dfs(grid,x,y);}}}
};

 2.3  岛屿的最大面积

695. 岛屿的最大面积 - 力扣(LeetCode)

class Solution {int dx[4] = {0,0,1,-1};int dy[4] = {1,-1,0,0};int ret,m,n,count;bool vis[51][51];
public:int maxAreaOfIsland(vector<vector<int>>& grid) {m = grid.size(),n = grid[0].size();for(int i = 0;i<m;i++){for(int j = 0;j<n;j++){if(grid[i][j] == 1 && !vis[i][j]){dfs(grid,i,j);ret = max(ret,count);count = 0;}}}return ret;}void dfs(vector<vector<int>>& grid,int i,int j){count++;vis[i][j] = true;for(int k = 0;k<4;k++){int x = i + dx[k], y = j + dy[k];if(x >=0 && x < m && y >= 0 && y < n && grid[x][y] == 1 && !vis[x][y]){dfs(grid,x,y);}}}
};

2.4   被围绕的区域

130. 被围绕的区域 - 力扣(LeetCode)

 逆转思维,直接从边界进行DFS,将符合条件的改成‘.’,在遍历一遍

class Solution {int dx[4] = {1,-1,0,0};int dy[4] = {0,0,-1,1};int m,n;
public:void solve(vector<vector<char>>& board) {m = board.size(), n = board[0].size();for(int j = 0;j<n;j++){if(board[0][j] == 'O')  dfs(board,0,j);if(board[m-1][j] == 'O')    dfs(board,m-1,j);}for(int i = 0;i<m;i++){if(board[i][0] == 'O')  dfs(board,i,0);if(board[i][n-1] == 'O')   dfs(board,i,n-1);}for(int i = 0;i<m;i++)for(int j = 0;j<n;j++){cout<<board[i][j]<<" ";if(board[i][j] == '.')  board[i][j] = 'O';else if(board[i][j] == 'O') board[i][j] = 'X';}}void dfs(vector<vector<char>>& board,int i,int j){board[i][j] = '.';for(int k = 0; k < 4; k++){int x = i + dx[k], y = j + dy[k];if(x >=0 && x < m && y >= 0 && y < n && board[x][y] == 'O'){dfs(board,x,y);}}}
};

 2.5  太平洋大西洋水流问题

417. 太平洋大西洋水流问题 - 力扣(LeetCode)

 

class Solution {int dx[4] = {1,-1,0,0};int dy[4] = {0,0,1,-1};vector<vector<int>> ret;int m,n;
public:vector<vector<int>> pacificAtlantic(vector<vector<int>>& heights) {m = heights.size(),n = heights[0].size();vector<vector<bool>> visP(m,vector<bool>(n));vector<vector<bool>> visA(m,vector<bool>(n));for(int j = 0; j < n ;j++){dfs(heights,0,j,visP);dfs(heights,m-1,j,visA);}for(int i = 0; i < m; i++){dfs(heights,i,0,visP);dfs(heights,i,n-1,visA);}for(int i = 0;i < m; i++)for(int j = 0; j < n; j++){if(visP[i][j] && visA[i][j]){ret.push_back({i,j});}}return ret;}void dfs(vector<vector<int>>& heights,int i, int j,vector<vector<bool>>& vis){vis[i][j] = true;for(int k = 0; k < 4; k++){int x = i + dx[k], y = j + dy[k];if(x >=0 && x < m && y >= 0 && y < n && heights[x][y] >= heights[i][j] && !vis[x][y]){dfs(heights,x,y,vis);}}}
};

 2.6  扫雷游戏

529. 扫雷游戏 - 力扣(LeetCode)

class Solution {int dx[8] = {1,-1,0,0,1,1,-1,-1};int dy[8] = {0,0,1,-1,1,-1,1,-1};int m,n;
public:vector<vector<char>> updateBoard(vector<vector<char>>& board, vector<int>& click){if(board[click[0]][click[1]] == 'M'){board[click[0]][click[1]] = 'X';return board;}m = board.size(),n = board[0].size();dfs(board,click[0],click[1]);return board;}void dfs(vector<vector<char>>& board,int i,int j){int count = 0;for(int k = 0; k < 8; k++){int x = i + dx[k], y = j + dy[k];if(x >=0 && x < m && y >= 0 && y < n && board[x][y] == 'M'){count++;}}if(count)  //周围有地雷{board[i][j] = count + '0';return;}else  //周围没地雷{board[i][j] = 'B';for(int k = 0; k < 8; k++){int x = i + dx[k], y = j + dy[k];if(x >=0 && x < m && y >= 0 && y < n && board[x][y] == 'E'){dfs(board,x,y);}}}}
};

 2.7  衣橱整理(原:面试题 13. 机器人的运动范围

LCR 130. 衣橱整理 - 力扣(LeetCode)

class Solution {int ret;bool vis[101][101];int dx[4] = {0,0,1,-1};int dy[4] = {1,-1,0,0};int _m,_n,_cnt;
public:int wardrobeFinishing(int m, int n, int cnt) {_m = m,_n = n, _cnt = cnt;dfs(0,0);return ret;}void dfs(int i,int j){ret++;vis[i][j] = true;for(int k = 0; k < 4; k++){int x = i + dx[k], y = j + dy[k];if(x >=0 && x < _m && y >= 0 && y < _n && !vis[x][y] && check(x,y)){dfs(x,y);}}}bool check(int i,int j){int tmp = 0;while(i){tmp += i % 10;i /= 10;}while(j){tmp += j % 10;j /= 10;}return tmp <= _cnt;}
};

总结

✨✨✨各位读友,本篇分享到内容是否更好的让你理解floodfill算法,如果对你有帮助给个👍赞鼓励一下吧!!
🎉🎉🎉世上没有绝望的处境,只有对处境绝望的人。
感谢每一位一起走到这的伙伴,我们可以一起交流进步!!!一起加油吧!!

关键字:兰州疫情为什么如此严重_动态网页制作的工具有哪些_河南网站关键词优化_淘宝客推广一天80单

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: