博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《Cracking the Coding Interview》——第9章:递归和动态规划——题目7
阅读量:4879 次
发布时间:2019-06-11

本文共 1750 字,大约阅读时间需要 5 分钟。

2014-03-20 03:35

题目:实现画图的Flood Fill操作。

解法:DFS和BFS皆可,但BFS使用的队列在时间复杂度上常数项比较大,速度略慢,所以我选了DFS。当然,如果图很大的话DFS是会导致call stack溢出的,那就摊上事儿了。

代码:

1 // 9.7 Implement a flood fill painter that changes a certain area to a certain color. You are given one point as the seed. 2 #include 
3 #include
4 using namespace std; 5 6 void floodFill(int i, int j, int n, int m, int new_color, vector
> &canva) 7 { 8 int old_color = canva[i][j]; 9 10 canva[i][j] = new_color;11 if (i >= 1 && old_color == canva[i - 1][j]) {12 floodFill(i - 1, j, n, m, new_color, canva);13 }14 if (i <= n - 2 && old_color == canva[i + 1][j]) {15 floodFill(i + 1, j, n, m, new_color, canva);16 }17 if (j >= 1 && old_color == canva[i][j - 1]) {18 floodFill(i, j - 1, n, m, new_color, canva);19 }20 if (j <= m - 2 && old_color == canva[i][j + 1]) {21 floodFill(i, j + 1, n, m, new_color, canva);22 }23 }24 25 int main()26 {27 int i, j, c;28 int n, m;29 vector
> canva;30 31 scanf("%d%d", &n, &m);32 canva.resize(n);33 for (i = 0; i < n; ++i) {34 canva[i].resize(m);35 }36 37 for (i = 0; i < n; ++i) {38 for (j = 0; j < m; ++j) {39 scanf("%d", &canva[i][j]);40 }41 }42 43 while (scanf("%d%d%d", &i, &j, &c) == 3) {44 if (i >= 0 && i <= n - 1 && j >= 0 && j <= m - 1) {45 floodFill(i, j, n, m, c, canva);46 }47 for (i = 0; i < n; ++i) {48 for (j = 0; j < m; ++j) {49 printf((j == 0 ? "%d" : " %d"), canva[i][j]);50 }51 printf("\n");52 }53 }54 55 for (i = 0; i < n; ++i) {56 canva[i].clear();57 }58 canva.clear();59 60 return 0; 61 }

 

转载于:https://www.cnblogs.com/zhuli19901106/p/3612796.html

你可能感兴趣的文章
TCP和UDP的优缺点及区别
查看>>
MATLAB消除曲线毛刺Outlier Detection and Removal [hampel]
查看>>
MySQL DATE_SUB() 函数
查看>>
在SSH框架下按条件分页查询
查看>>
jquery选择器
查看>>
【javascript学习——《javascript高级程序设计》笔记】DOM操作
查看>>
高效的SQL语句翻页代码
查看>>
NPAPI插件开发详细记录:用VS2010开发NPAPI插件步骤
查看>>
linux下Makefile全解(二)
查看>>
XMLHTTP.readyState的五种状态
查看>>
百度外卖 前端面试题
查看>>
record for json formate site
查看>>
查询树形的根节点
查看>>
HDU 1272 小希的迷宫
查看>>
hdu 5412 CRB and Queries(整体二分)
查看>>
CentOS如何安装linux桌面?
查看>>
Speech and Booth Demo in Maker Faire Shenzhen 2018
查看>>
bzoj 1670: [Usaco2006 Oct]Building the Moat护城河的挖掘
查看>>
bzoj 2281: [Sdoi2011]黑白棋
查看>>
bzoj 4475: [Jsoi2015]子集选取
查看>>