程序员面试金典: 9.9 递归和动态规划 9.7颜色填充
来源:互联网 发布:新网注册域名流程 编辑:程序博客网 时间:2024/05/21 13:56
#include <iostream>#include <stdio.h>using namespace std;/*问题:编写函数,实现许多图片编辑软件都支持的“填充颜色”功能。给定一个屏幕(以二维数组表示,元素为颜色值)、一个点和 和一个新的颜色值,将新颜色值填入这个点的周围区域,直到原来的颜色值全部都改变。分析:应该是经典的图形学算法:种子填充算法。该题目所要求的是从给定点开始,将整个屏幕区域的颜色都变为新的颜色。 种子填充可以采用上下左右的递归来填充。对于当前点,将当前点填充好后,设置当前点访问过,然后获取当前点上下左右4个点, 对这4个点中没有访问过的点都进行递归处理。 可以以采用广度优先搜索来做。输入:5(宽) 5(高)1(起点的横坐标) 3(起点的纵坐标)1(新的颜色值)输出:(整个区域填充后结果)1 1 1 1 11 1 1 1 11 1 1 1 11 1 1 1 11 1 1 1 1*/const int MAXSIZE = 1000;int gColorArray[MAXSIZE][MAXSIZE];//颜色数组int gVisitArray[MAXSIZE][MAXSIZE];//访问数组,0表示未访问,1表示访问//遍历的上下左右4个顶点走法int gNext[4][2] = {{0 , 1},{0 , -1},{-1, 0},{1,0}};//填充颜色void fillColor(int x , int y , int width , int height, int newColor){int tempX ;int tempY;//遍历上下左右4个点for(int i = 0 ; i < 4 ; i++){tempX = x + gNext[i][0];tempY = y + gNext[i][1];//判断候选点是否超出范围,是否访问过,如果已经访问,就不再处理if(tempX < 0 || tempX > width || tempY < 0 || tempY > height || 1 == gVisitArray[tempX][tempY]){continue;}//接下来开始设置当前点已访问,并重新设置颜色,然后递归处理gVisitArray[tempX][tempY] = 1;gColorArray[tempX][tempY] = newColor;fillColor(tempX , tempY , width , height , newColor);}}void print(int width , int height){for(int i = 0 ; i < width ; i++ ){for(int j = 0 ; j < height ; j++){if(j){cout << " " << gColorArray[i][j];}else{cout << gColorArray[i][j];}}cout << endl;}cout << endl;}void process(){int width , height;int beginX , beginY;int newColor;while(cin >> width >> height){cin >> beginX >> beginY;cin >> newColor;if(beginX < 0 || beginY < 0 || beginX > width || beginY > beginY || newColor > 255 || newColor < 0){cout << "Input is wrong,please input again" << endl;continue;}memset(gColorArray , 0 , sizeof(gColorArray) ); // 初始化颜色数组每个颜色为黑色(即0)memset(gVisitArray , 0 , sizeof(gVisitArray));//下面使用给定的颜色进行填充fillColor(beginX , beginY , width , height , newColor);print(width , height);}}int main(int argc, char* argv[]){process();getchar();return 0;}
0 0
- 程序员面试金典: 9.9 递归和动态规划 9.7颜色填充
- 程序员面试金典: 9.9 递归和动态规划 9.9八皇后问题
- 程序员面试金典: 9.9 递归和动态规划 9.1上楼的方式
- 程序员面试金典: 9.9 递归和动态规划 9.1上楼的方式
- 程序员面试金典: 9.9 递归和动态规划 9.2机器人走路的方式
- 程序员面试金典: 9.9 递归和动态规划 9.3魔术索引
- 程序员面试金典: 9.9 递归和动态规划 9.4求某集合的所有子集
- 程序员面试金典: 9.9 递归和动态规划 9.5求字符串的全排列
- 程序员面试金典: 9.9 递归和动态规划 9.10求堆出箱子的最大高度
- 程序员面试金典: 9.9 递归和动态规划 9.11求布尔表达式的表达个数
- 程序员面试金典: 9.9 递归和动态规划 9.2机器人走路的方式_避免禁区
- 程序员面试金典: 9.9 递归和动态规划 9.6打印n对括号的全部有效组合
- 9.9递归和动态规划(七)——实现许多图片编辑软件都支持的“填充颜色”功能
- 《程序员代码面试指南》第四章 递归和动态规划
- 程序员面试金典: 9.9 递归和动态规划 9.8求n分可以由25分,10分,5分,1分的硬币的表示方法
- 动态规划和递归
- 递归和动态规划
- 动态规划和递归
- redis学习五,redis集群搭建及添加主从节点
- Android如何判断是否在后台运行
- Windows Server 2008 r2系统安全学习日记 — shadow security scanner
- 什么是面向对象
- Caffe可视化工具digits安装过程来啦。。。。。。
- 程序员面试金典: 9.9 递归和动态规划 9.7颜色填充
- free -m分析
- gem5学习8——GEM5模块继承关系和运行机制解析
- DWR 同步操作, 取得回调函数的返回值
- Google翻译,3个步骤灭绝人类
- 使用NTP服务器同步Android设备时间
- 在C++中子类继承和调用父类的构造函数方法
- JavaScript Date对象
- PAT 基础测试打印沙漏