当前位置:   article > 正文

BFS解决FloodFill算法:(Leetcode:733. 图像渲染)

BFS解决FloodFill算法:(Leetcode:733. 图像渲染)

题目链接:733. 图像渲染 - 力扣(LeetCode) 

使用广度优先遍历算法解决该问题:

从初始位置开始搜索,初始位置符合条件就入栈,并修改初始位置值。初始位置出栈。

再从初始位置开始广度优先搜索(上下左右)其他符合条件的位置入栈,并修改它们的值(搜索到即修改,防止同一位置被多次入栈)。每次出栈一个位置,并再次从该位置广度优先搜索,循环直至栈空。

  1. typedef pair<int,int> PII;
  2. int dx[4]={0,0,1,-1};
  3. int dy[4]={1,-1,0,0};
  4. class Solution {
  5. public:
  6. vector<vector<int>> floodFill(vector<vector<int>>& image, int sr, int sc, int color) {
  7. //处理边界条件(初始位置即为color则不需要修改)
  8. if(image[sr][sc]==color)
  9. return image;
  10. //广度优先搜索
  11. int prev=image[sr][sc];//记录初始位置的值
  12. queue<PII> q;
  13. q.push({sr,sc});//将初始位置入栈
  14. image[sr][sc]=color;//修改值
  15. int m=image.size();//行数,纵坐标边界值
  16. int n=image[0].size();//列数,横坐标边界值
  17. while(q.size())
  18. {
  19. int a=q.front().first;
  20. int b=q.front().second;
  21. q.pop();//出栈
  22. //广度优先搜索
  23. for(int i=0;i<4;++i)
  24. {
  25. int x=a+dx[i];
  26. int y=b+dy[i];
  27. if(x>=0&&y>=0&&x<m&&y<n&&image[x][y]==prev)
  28. {
  29. q.push({x,y});
  30. image[x][y]=color;//修改值
  31. }
  32. }
  33. }
  34. return image;
  35. }
  36. };
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/859506
推荐阅读
相关标签
  

闽ICP备14008679号