新闻详情

新闻详情

首页 / 资讯中心 / 详情

BFS算法解决FloodFill问题

发布时间:2026/9/27 8:47:28来源:尧图网络
BFS算法解决FloodFill问题
BFS算法解决FloodFill问题图像渲染岛屿数量岛屿的最大面积被围住的区域图像渲染题目解析就是将这里面指定一个元素将其上下左右和这个一样的值全部修改成另外一个值并且其上下左右也可以进行上下左右进行扩展也就是将这个一片区域都修改成color指定值BFS直接遍历所有下标并且看其上下左右下标不断进行修改不断进行扩展延申此时就可以使用队列放入 int[ ] 数组对应存放行、列下标每一次不断取出进行上下左右延申判断其是否和image[sr][sc]如果一样就继续放入队列中不断进行操作直到队列为空这里通过上下左右对应下标分别classSolution{int[]dx{0,0,1,-1};int[]dy{1,-1,0,0};publicint[][]floodFill(int[][]image,intsr,intsc,intcolor){intprevimage[sr][sc];if(prevcolor){//如果要修改和修改的一样此时就不需要修改returnimage;}intmimage.length;intnimage[0].length;//存放其下标Queueint[]queuenewLinkedList();queue.add(newint[]{sr,sc});while(!queue.isEmpty()){int[]temqueue.poll();intatem[0];//行intbtem[1];//列//将这个颜色修改image[a][b]color;//看这个位置前后左右位置for(inti0;i4;i){intxadx[i];intybdy[i];if(x0xmy0ynimage[x][y]prev){queue.add(newint[]{x,y});}}}returnimage;}}岛屿数量题目解析此时1表示岛屿并且1的上下左右如果有1的话就会进行延申展开最终求出有多少岛屿BFS遍历整个数组但是此时一个岛屿需要延申到不能延申为止这样才成为一个岛屿此时会出现问题我们会不断扩展后面遍历到这个位置又会让其岛屿数量1此时就重复统计了这里有两种解决方案方案一每次遍历过的位置将这里的 1 修改成 0方案二创建一个同等规模的数组如果统计过了就进行标记一下classSolution{int[]dx{0,0,1,-1};int[]dy{1,-1,0,0};boolean[][]visited;//标记已经遍历过的位置intm0;intn0;publicintnumIslands(char[][]grid){mgrid.length;ngrid[0].length;visitednewboolean[m][n];intret0;for(inti0;im;i){for(intj0;jn;j){//当时1并且没有遍历过结果if(grid[i][j]1visited[i][j]false){ret;dfs(grid,i,j);//将其旁边的visited都标记为遍历过}}}returnret;}publicvoiddfs(char[][]grid,inti,intj){Queueint[]queuenewLinkedList();queue.add(newint[]{i,j});visited[i][j]false;while(!queue.isEmpty()){int[]temqueue.poll();intatem[0];intbtem[1];for(intk0;k4;k){intxadx[k];intybdy[k];if(x0xmy0yngrid[x][y]1!visited[x][y]){queue.add(newint[]{x,y});visited[x][y]true;}}}}}岛屿的最大面积题目解析就是找出岛屿最大面积思想此时和上一题岛屿数量类似此时我们只需要在dfs方法中返回此时岛屿数量即可classSolution{int[]dx{0,0,1,-1};int[]dy{1,-1,0,0};boolean[][]visited;//标记已经遍历过的intm0;intn0;publicintmaxAreaOfIsland(int[][]grid){intret0;mgrid.length;ngrid[0].length;visitednewboolean[m][n];//此时遍历这个岛屿的时候统计一下它的面积返回for(inti0;im;i){for(intj0;jn;j){if(grid[i][j]1visited[i][j]false){//此时更新结果retMath.max(ret,dfs(grid,i,j));}}}returnret;}publicintdfs(int[][]grid,inti,intj){intcount0;//此时岛屿面积Queueint[]queuenewLinkedList();queue.add(newint[]{i,j});visited[i][j]true;count;while(!queue.isEmpty()){//队列为空就结束int[]temqueue.poll();intatem[0];intbtem[1];for(intk0;k4;k){intxadx[k];intybdy[k];//延申if(x0xmy0yngrid[x][y]1visited[x][y]false){queue.add(newint[]{x,y});visited[x][y]true;count;}}}returncount;}}被围住的区域题目解析就是将被X围住的O修改成X,未被围住的不做修改思想由于以前是一边遍历一边修但是这里会出现不需要修改的问题可能修改一半发现不需要修改此时这里还需要进行二次判断因此这里采用正难则反的思想1.先使用dfs遍历边界此时将边界及其扩展部分修改成 其他字符2.最后遍历一遍数组将剩下未被修改的O修改成X将这里被修改成其他字符的修改回以前的O字符classSolution{int[]dx{0,0,1,-1};int[]dy{1,-1,0,0};intm0;intn0;publicvoidsolve(char[][]board){mboard.length;nboard[0].length;//1.将边界的O以及相邻的O全部修改成 . 最后在修改回来//左右两列for(inti0;im;i){if(board[i][0]O){dfs(board,i,0);}if(board[i][n-1]O){dfs(board,i,n-1);}}//上下两行for(inti0;in;i){if(board[0][i]O){dfs(board,0,i);}if(board[m-1][i]O){dfs(board,m-1,i);}}//剩下的O修改成X将上面修改的还原for(inti0;im;i){for(intj0;jn;j){if(board[i][j]O){board[i][j]X;//修改回来}elseif(board[i][j].){board[i][j]O;}}}}publicvoiddfs(char[][]board,inti,intj){Queueint[]queuenewLinkedList();queue.add(newint[]{i,j});board[i][j].;//修改成.while(!queue.isEmpty()){int[]temqueue.poll();intatem[0];intbtem[1];for(intk0;k4;k){intxadx[k];intybdy[k];if(x0xmy0ynboard[x][y]O){queue.add(newint[]{x,y});board[x][y].;}}}}}
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

长春seo按天计费避坑指南:3步图解步骤解决网站被黑挂马难题 2026/9/27 9:41:07

长春seo按天计费避坑指南:3步图解步骤解决网站被黑挂马难题

长春seo按天计费避坑指南:3步图解步骤解决网站被黑挂马难题 网站突然打不开,浏览器弹出红色警告“存在安全风险”,后台代码里全是看不懂的乱码和恶意跳转链接。这时候你最想做的不是优化排名,而是立刻把网站救回来。很多长春本地的企业老板和运营人员…

阅读更多 →
如何做公司网站的保姆级教程 2026/9/27 9:41:07

如何做公司网站的保姆级教程

告别域名服务器焦虑:从零搭建公司网站的实操指南 很多项目经理一听到“建网站”,脑子里蹦出来的不是页面设计,而是“域名去哪买”、“服务器选哪家”、“备案要多久”。这确实是 从零搭建…

阅读更多 →
wordpress导入json怎么选 2026/9/27 9:40:52

wordpress导入json怎么选

从零搭建WordPress站点,导入JSON只需3步,避开90%的坑 找建站公司报价五万,自己动手可能只要一台云服务器。很多老板在【wordpress导入json】这一步卡壳,要么格式报错,要么数据丢失。别慌,今天拆解一个真实案例,教你【从…

阅读更多 →
WordPress导航栏去掉避坑指南:从被黑到重建的实操复盘 2026/9/27 9:40:29

WordPress导航栏去掉避坑指南:从被黑到重建的实操复盘

WordPress导航栏去掉避坑指南:从被黑到重建的实操复盘 网站突然打不开,浏览器弹出“此网站不安全”或者打开后满屏乱码广告,那种心脏骤停的感觉,做过网站的都懂。很多新手站长第一反应是“我是不是被黑挂马了”,结果一通乱删文件,反而把数据库…

阅读更多 →
WeKnora RAG 知识库本地部署 30 分钟跑通,配置、检索验证与排障全在这一篇 2026/9/27 9:40:15

WeKnora RAG 知识库本地部署 30 分钟跑通,配置、检索验证与排障全在这一篇

WeKnora RAG 知识库本地部署 30 分钟跑通,配置、检索验证与排障全在这一篇 【免费下载链接】WeKnora Open-source LLM knowledge platform: turn raw documents into a queryable RAG, an autonomous reasoning agent, and a self-maintaining Wiki. 项目地址: ht…

阅读更多 →
网站设计前景怎样?搞懂完整流程不被坑 2026/9/27 9:40:15

网站设计前景怎样?搞懂完整流程不被坑

网站设计前景怎样?搞懂完整流程不被坑 找建站公司最怕啥?怕被坑高价,交钱后只给你一个模板套壳,还得额外加钱买域名、买服务器、搞备案。很多老板问网站设计前景怎样,其实这行水很深,但只要你把 完整流程…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉