深度优先搜索-图像渲染

题目来源:力扣

链接:力扣

var floodFill = function(image, sr, sc, newColor) {
    let imagewight = image[0].length;
    let imageHeight = image.length;
    let oldcolor = image[sr][sc];
    if(oldcolor == newColor){
        return image;
    }
    // 深度优先搜索(用到了递归)
    let search = (i, j) => {
        // 判断是否到达临界点,如果到了就结束循环
        if (i < 0 || i >= imageHeight || j < 0 || j >= imagewight || image[i][j] != oldcolor) {
            return false;
        }
        // 将符合的位置改变颜色
        image[i][j] = newColor; 
        // 每个传入的点位都会向四个方向一直走
        // 这个递归函数会一直向上走,直到到达边界或者颜色不符合要求
        search(i - 1, j);
        // 这个递归函数会一直向下走,直到到达边界或者颜色不符合要求
        search(i + 1, j);
        // 这个递归函数会一直向左走,直到到达边界或者颜色不符合要求
        search(i, j - 1);
        // 这个递归函数会一直向右走,直到到达边界或者颜色不符合要求
        search(i, j + 1);
    };
    // 调用这个函数,将初始位置传进去
    search(sr, sc);
    return image;
};

深度优先:从起始点位开始对每一个可能的分支进行搜索直到分支结束,在这期间对每一个到达的点位都进行它的分支搜索直到临界点,注意不要重复搜索。(有点不撞南墙不回头的意思)

深度优先搜索一般结合递归使用,递归:程序调用自身的编程技巧,通俗点说就是自己调用自己,但是要注意递归需要有结束判断,不然会陷入死循环。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值