careercup-递归和动态规划 9.7
9.7 编写函数,实现许多图片编辑软件都支持的“填充颜色”功能。给定一个屏幕(以二维数组表示,元素为颜色值)、一个点和一个新的颜色值,将新颜色值填入这个点的周围区域,直到原来的颜色值全部改变。
类似leetcode:Surrounded Regions
解法:首先,想象一下这个方法是怎么回事。假设要对一个像素(比如绿色)调用paintFill(也即点击图片编辑软件的填充颜色),我们希望颜色向四周“渗出”。我们会对周围的像素逐一调用paintFill,向外扩张,一旦碰到非绿色的像素就停止填充。
我们使用递归的方法实现这个算法:
#include<vector>
#include<iostream>
using namespace std; enum Color{Black,White,Red,Yellow,Green}; bool Fill(vector<vector<Color> > &board,int x,int y,Color color,Color ncolor)
{
if(x<||x>=(int)board.size()||y<||y>=(int)board[].size())
return false;
if(board[x][y]==color)
{
board[x][y]=ncolor;
Fill(board,x-,y,color,ncolor);
Fill(board,x+,y,color,ncolor);
Fill(board,x,y-,color,ncolor);
Fill(board,x,y+,color,ncolor);
}
return true;
}
bool paintFill(vector<vector<Color> > &board,int x,int y,Color ncolor)
{
if(board[x][y]==ncolor)
return false;
return Fill(board,x,y,board[x][y],ncolor);
} int main()
{
vector<vector<Color> > matrix={
{Color::Green,Color::Green,Color::Black},
{Color::Green,Color::Red,Color::Black},
{Color::Green,Color::Black,Color::Green}
};
cout<<paintFill(matrix,,,Color::Yellow)<<endl;
for(auto m:matrix)
{
for(auto a:m)
cout<<a<<" ";
cout<<endl;
}
}
careercup-递归和动态规划 9.7的更多相关文章
- 70. Climbing Stairs【leetcode】递归,动态规划,java,算法
You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb ...
- 算法 递归 迭代 动态规划 斐波那契数列 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- C#递归、动态规划计算斐波那契数列
//递归 public static long recurFib(int num) { if (num < 2) ...
- 面试题目——《CC150》递归与动态规划
面试题9.1:有个小孩正在上楼梯,楼梯有n个台阶,小孩一次可以上1阶.2阶或者3阶.实现一个方法,计算小孩有多少种上楼梯的方式. 思路:第4个数是前三个数之和 注意:能不能使用递归,能不能建立一个很大 ...
- python---通过递归和动态规划策略解决找零钱问题
也是常见套路. # coding = utf-8 def rec_mc(coin_value_list, change, know_results): min_coins = change if ch ...
- Idea 02.暴力递归与动态规划(1)
1,关键词解释 1.1 暴力递归: 1, 把问题转化为规模缩小了的同类问题的子问题 2, 有明确的不需要继续进行递归的条件(base case) 3, 有当得到了子问题的结果之后的决策过程 4, 不记 ...
- scramble-string——两个字符串经过树化并旋转后是否一致、递归、动态规划
Given a string s1, we may represent it as a binary tree by partitioning it to two non-empty substrin ...
- OptimalSolution(1)--递归和动态规划(1)斐波那契系列问题的递归和动态规划
一.斐波那契数列 斐波那契数列就是:当n=0时,F(n)=0:当n=1时,F(n)=1:当n>1时,F(n) = F(n-1)+F(n-2). 根据斐波那契数列的定义,斐波那契数列为(从n=1开 ...
- 递归,动态规划,找最短路径,Help Jimmy
题目链接:http://poj.org/problem?id=1661 解题报告: 1.老鼠每次来到一块木板上都只有两条路可以走,可以使用递归 #include <stdio.h> #in ...
- 《Cracking the Coding Interview》——第9章:递归和动态规划——题目10
2014-03-20 04:15 题目:你有n个盒子,用这n个盒子堆成一个塔,要求下面的盒子必须在长宽高上都严格大于上面的.如果你不能旋转盒子变换长宽高,这座塔最高能堆多高? 解法:首先将n个盒子按照 ...
随机推荐
- push本地代码到github出错
$ git push -u origin masterTo git@github.com:******/Demo.git ! [rejected] master -> master (non-f ...
- APP-PER-50022: Oracle Human Resources could not retrieve a value for the User Type profile option.
Symptoms ----------------------- AP > Setup > Organizations Show Error tips: APP-PER-50022: Or ...
- Android开发UI之自定义控件的皮肤
定义一个button的皮肤,设置属性android:background="@drawable/button_skin",button_skin.xml文件为要下文中的资源文件. ...
- 开发完整的Web项目必备
开发工具 数据库系统 DB2数据库 Oracle数据库 SQL Server数据库 MySQL数据库 Access数据库 Web服务器 IIS BEA WebLogic Server Apache T ...
- cmd for 用法
1:for命令及变量 基本格式: FOR /参数 %variable IN (set) DO command [command_parameters] %variable:指定一个单一字母可替换的参数 ...
- 《C#并行编程高级教程》第4章 并发集合 笔记
这一章主要介绍了System.Collections.Concurrent下的几个类. ConcurrentQueue<T> 并发队列.完全无锁,使用CAS(compare-and-swa ...
- Senparc.Weixin.MP SDK 微信公众平台开发教程(一):微信公众平台注册
微信公众平台(下面简称“公众平台”)注册步骤和导航还是比较流畅的,因此这个教程对于上网经验丰富的朋友来说,有点多余.不过为了保持教程系列的完整性,这里还是认认真真把流程梳理一遍. 第一步:进入公众平台 ...
- 一步步写STM32 OS【二】环境搭建
一.安装IAR for ARM6.5 二.新建工程 1.选择处理器:STM32F407VG,暂不使用FPU 2.必要的路径配置和宏定义 3.使用SWO重定向IO输出 4.使用ST-LINK仿真器 5. ...
- 谈谈分布式事务之二:基于DTC的分布式事务管理模型[下篇]
[续上篇] 当基于LTM或者KTM的事务提升到基于DTC的分布式事务后,DTC成为了本机所有事务型资源管理器的管理者:此外,当一个事务型操作超出了本机的范 围,出现了跨机器的调用后,本机的DTC需要于 ...
- VI编辑器的使用方法
一.vi的工作模式vi有两种工作模式: 编辑模式:用来输入和编辑文件的模式,屏幕上会显示用户的键入,按键不是被解释为命令执行,而是作为文本写到用户的文件中. 指令模式:用来编辑.存盘和退出文件的模 ...