首页 > 编程语言 >(算法)图像渲染————<递归>

(算法)图像渲染————<递归>

时间:2024-08-08 23:52:11浏览次数:17  
标签:递归 渲染 int sr image color 算法 key sc

1. 题⽬链接:733.图像渲染

2. 题⽬描述:

3. 算法思路:

可以利⽤「深搜」或者「宽搜」,遍历到与该点相连的所有「像素相同的点」,然后将其修改成指定 的像素即可。

递归函数设计:

• 参数:

a. 原始矩阵;

b. 当前所在的位置;

c. 需要修改成的颜⾊。

• 函数体:

a. 先将该位置的颜⾊改成指定颜⾊(因为我们的判断,保证每次进⼊递归的位置都是需要修改的 位置);

b. 遍历四个⽅向上的位置: 

        ▪ 如果当前位置合法,并且与初试颜⾊相同,就递归进去。

C++算法代码: 

class Solution 
{
public:
    int dx[4] = { 1,0,-1,0 };
    int dy[4] = { 0,1,0,-1 };
    int key;    //目标值
    int new_key;    //修改后的值
    void dfs(vector<vector<int>>& image,int x,int y)
    {
        for (int i = 0; i < 4; i++)
        {
            int X = x + dx[i], Y = y + dy[i];
            //合法性判断
            if (X < 0 || X >= image.size() || Y < 0 || Y >= image[0].size() || image[X][Y] !=key)
            {
                continue;
            }
            //修改值
            image[X][Y]=new_key;
            dfs(image, X, Y);
        }
    }
    vector<vector<int>> floodFill(vector<vector<int>>& image, int sr, int sc, int color) 
    {
        //如果初始点的值等于要修改的值,则不用修改直接返回答案
        if(image[sr][sc] == color) 
        {
            return image;
        }
        key=image[sr][sc];
        new_key=color;
        image[sr][sc]=color;
        dfs(image,sr,sc);
        return image;
    }
};

Java算法代码:

class Solution
{
	int[] dx = { 0, 0, 1, -1 };
	int[] dy = { 1, -1, 0, 0 };
	int m, n;
	int prev;
	public int[][] floodFill(int[][] image, int sr, int sc, int color)
	{
		if (image[sr][sc] == color) return image;
		m = image.length; n = image[0].length;
		prev = image[sr][sc];
		dfs(image, sr, sc, color);
		return image;
	}
	public void dfs(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);
			}
		}
	}
}

标签:递归,渲染,int,sr,image,color,算法,key,sc
From: https://blog.csdn.net/2301_79580018/article/details/141039088

相关文章

  • 2024-8-8 算法学习
    P1972[SDOI2009]HH的项链题意:统计区间内不同数字的种类对于[l,r]区间内的某一种贝壳来说,只有最右边的贝壳有意义,所以将所有询问区间[l,r]按照r从小到大排序;对每一个数字记录上一次出现的位置利用线段树完成单点添加和区间查询P3567[POI2014]KUR-Couriers题意:统计区间内出......
  • 教你领悟函数递归的本质
    一、何为递归①在C语言中,递归就是函数自己调用自己。递是指递推,归是指回归。②递归的思想:将复杂的问题简单化。③递推的两个必要条件。a:递归存在限制条件,当满足限制条件时,递归便不再继续b:每一次递归都要越来越接近限制条件/*用递归的方式求n!(n>=0)*/intFact(i......
  • 代码随想录算法刷题训练营day49:LeetCode(42)接雨水、LeetCode(84)柱状图中最大的矩形
    代码随想录算法刷题训练营day49:LeetCode(42)接雨水、LeetCode(84)柱状图中最大的矩形LeetCode(42)接雨水题目代码importjava.util.Stack;classSolution{publicinttrap(int[]height){//用单调栈进行操作intsum=0;Stack<Integ......
  • 深中通道元宇宙启航!3DCAT实时云渲染助力沉浸式体验深中通道
    2024年6月30日上午,深圳至中山跨江通道(以下简称“深中通道”)开通活动在深中通道西人工岛举行。10时50分许,深中通道正式开通。下午3时已通车试运营。粤港澳大湾区超级工程深中通道(图源新华网)01 幻海云桥:沉浸式体验的新纪元就在开通的同一天,中山日报社与3DCAT、广东涌态信息等......
  • react渲染列表中的key的作用
    这个key首先是只在渲染数组列表的时候会用到。比如经常遇到的 如上没有key的话,会报一个错,那么,我们可不可以使用数组的index作为下标呢?答案是不推荐。因为在数组项的顺序在插入、删除或者重新排序等操作中会发生改变,此时把索引作为key可能会产生一些微妙的bug。像下面这种......
  • 轮换挑选图片,补充 es6的对象写法,uniapp使用,class和style,条件渲染,列表渲染,input
    Ⅰ轮换挑选图片【一】方式一<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><scriptsrc="./js2/vue.js"></script></head><body>......
  • Java方法06:递归
    A方法调用B方法,我们很容易理解!递归就是:A方法调用A方法!就是自己调用自己,因此我们在设计递归算法时,一定要指明什么时候自己不调用自己。否则,就是个死循环!递归算法重点:递归是一种常见的解决问题的方法,即把问题逐渐简单化。递归的基本思想就是“自己调用自己”,一个使用递归技术的方......
  • 重塑购车体验,实时云渲染赋能东风日产探路云看车新体验
    在科技日新月异的今天,汽车行业正经历着前所未有的深刻变革。随着互联网+、大数据、人工智能等新兴技术的深度融合,汽车营销策略也迎来了从传统展示到数字化体验的跨越。消费者的购车习惯逐渐倾向于线上互动与深度体验,希望在线上获得线下同等的体验,迫使汽车制造商及经销商重新审......
  • 1.13 - 动手学聚类算法
    1.基于距离的k-means聚类,需要人工提供聚簇数量K1.1通过肘方法确定最佳聚簇数量 importnumpyasnpimportmatplotlib.pyplotaspltfromsklearn.clusterimportKMeansfromsklearn.preprocessingimportStandardScalerfromsklearn.datasetsimportmake_blobs,lo......
  • 递归调用生成部门的所有子部门
    1、样例publicclassDepartmentService{publicstaticvoidmain(String[]args){Map<String,Dept>deptMap=newHashMap<>();deptMap.put("研发部",newDept("研发部","A公司"));deptMap.put(&q......