【广度优先搜索】FloodFill算法: 图像渲染,岛屿数量,岛屿的最大面积,被围绕的区域
文章目录1. 图像渲染LC733题目描述解题思路代码实现2. 岛屿数量LC200题目描述代码实现3. 岛屿的最大面积LC695题目描述代码实现4. 被围绕的区域LC130题目描述解题思路代码实现参考DFS解决FloodFill问题1. 图像渲染LC733图像渲染题目描述解题思路从起点向四个方向类似层序遍历一层一层开始搜索代码实现classSolution{publicint[][]floodFill(int[][]image,intsr,intsc,intcolor){intprevimage[sr][sc];if(prevcolor)returnimage;intmimage.length;intnimage[0].length;int[]dx{1,-1,0,0};int[]dy{0,0,1,-1};Queueint[]queuenewLinkedList();queue.offer(newint[]{sr,sc});while(!queue.isEmpty()){int[]topqueue.poll();intitop[0];intjtop[1];image[i][j]color;for(intk0;k4;k){intxidx[k];intyjdy[k];if(x0xmy0ynimage[x][y]prev)queue.offer(newint[]{x,y});}}returnimage;}}2. 岛屿数量LC200岛屿数量题目描述代码实现classSolution{publicintnumIslands(char[][]grid){Queueint[]queuenewLinkedList();intmgrid.length;intngrid[0].length;boolean[][]checknewboolean[m][n];intret0;int[]dx{1,-1,0,0};int[]dy{0,0,1,-1};for(inti0;im;i){for(intj0;jn;j){if(!check[i][j]grid[i][j]1){ret;check[i][j]true;queue.offer(newint[]{i,j});while(!queue.isEmpty()){int[]topqueue.poll();intiitop[0];intjjtop[1];for(intk0;k4;k){intxiidx[k];intyjjdy[k];if(x0xmy0yn!check[x][y]grid[x][y]1){queue.offer(newint[]{x,y});check[x][y]true;}}}}}}returnret;}}3. 岛屿的最大面积LC695岛屿的最大面积题目描述代码实现classSolution{publicintmaxAreaOfIsland(int[][]grid){intmgrid.length;intngrid[0].length;boolean[][]checknewboolean[m][n];int[]dx{0,0,1,-1};int[]dy{1,-1,0,0};intret0;Queueint[]queuenewLinkedList();for(inti0;im;i){for(intj0;jn;j){if(!check[i][j]grid[i][j]1){check[i][j]true;queue.offer(newint[]{i,j});intarea1;while(!queue.isEmpty()){int[]topqueue.poll();intiitop[0];intjjtop[1];for(intk0;k4;k){intxiidx[k];intyjjdy[k];if(x0xmy0yn!check[x][y]grid[x][y]1){queue.offer(newint[]{x,y});check[x][y]true;area;}}}retMath.max(ret,area);}}}returnret;}}4. 被围绕的区域LC130被围绕的区域题目描述解题思路由于边界的O难处理可以先遍历边界对边界进行广度优先遍历修改为.接着对数组进行遍历如果遇到O可以直接修改为x遇到.可以直接修改为O代码实现classSolution{Queueint[]queuenewLinkedList();intm,n;int[]dx{0,0,1,-1};int[]dy{1,-1,0,0};publicvoidsolve(char[][]board){mboard.length;nboard[0].length;for(inti0;im;i){if(board[i][0]O)bfs(board,i,0);if(board[i][n-1]O)bfs(board,i,n-1);}for(intj0;jn;j){if(board[0][j]O)bfs(board,0,j);if(board[m-1][j]O)bfs(board,m-1,j);}for(inti0;im;i){for(intj0;jn;j){if(board[i][j]O)board[i][j]X;if(board[i][j].)board[i][j]O;}}}voidbfs(char[][]board,inti,intj){queue.offer(newint[]{i,j});board[i][j].;while(!queue.isEmpty()){int[]topqueue.poll();intiitop[0];intjjtop[1];for(intk0;k4;k){intxiidx[k];intyjjdy[k];if(x0xmy0ynboard[x][y]O){board[x][y].;queue.offer(newint[]{x,y});}}}}}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2449479.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!