种子填充找连通块 floodfill
Description
Given a diagram of Farmer John's field, determine how many ponds he has.
Input
* Lines 2..N+1: M characters per line representing one row of Farmer John's field. Each character is either 'W' or '.'. The characters do not have spaces between them.
Output
Sample Input
- 10 12
- W........WW.
- .WWW.....WWW
- ....WW...WW.
- .........WW.
- .........W..
- ..W......W..
- .W.W.....WW.
- W.W.W.....W.
- .W.W......W.
- ..W.......W.
Sample Output
- 3
Hint
There are three ponds: one in the upper left, one in the lower left,and one along the right side.
题目意思:输入行数列数,m,n。然后输入像上面的字符。找连着的W有多少块.....
解题思路:首先用一个二维字符数组把输入的存起来.... 然后一个一个的循环,如果是W并且还没有被标记过就进入zhao这个函数
zhao函数:找嘛,大概意思就是,看当前位置的8个方向有没有连通的,这里用到了递归。希望代码上的注释,对你有帮助。
(其实,自己对这代码的意思也是似懂非懂,找书打出来的)
代码如下:
- #include <iostream>
- #include <cstring>
- using namespace std;
- const int maxn=;
- int m,n; //这里将m,n定义在主函数外,作为全局变量,好被zhao函数调用
- char s[maxn][maxn];
- int d[maxn][maxn];
- void zhao(int r,int c,int b)
- {
- if(r<||r>=m||c<||c>=n) //出界的,不要
- return;
- if(d[r][c]>||s[r][c]!='W') // 不是W,或者已经访问标记过了的格子
- return;
- d[r][c]=b; //给访问过的格子标记
- for(int dr=-;dr<=;dr++) //这两个循环是表示一个格子的八个方向
- {
- for(int dc=-;dc<=;dc++)
- if(dr!=||dc!=) //这里不要0,0的格子,因为这就是它本身,并没有动
- zhao(r+dr,c+dc,b); //递归,将dr,dc加上去,这样就寻找了附近的格子
- }
- }
- int main()
- {
- memset(d,,sizeof(d)); //将d数组清零,好标记
- while(cin>>m>>n)
- {
- int flag=;
- for(int i=; i<m; i++)
- {
- for(int j=; j<n; j++)
- cin>>s[i][j];
- }
- for(int i=; i<m; i++)
- {
- for(int j=; j<n; j++)
- {
- if(d[i][j]==&&s[i][j]=='W')
- zhao(i,j,++flag);
- }
- }
- cout<<flag<<endl;
- }
- return ;
- }
种子填充找连通块 floodfill的更多相关文章
- 用DFS求连通块(种子填充)
[问题] 输入一个m行n列的字符矩阵,统计字符“@”组成多少个八连块.如果两个字符“@”所在的格子相邻(横.竖或者对角线方向),就说它们属于同一个八连块.例如,图6-9中有两个八连块. 图6-9 [分 ...
- ZOJ 3781 Paint the Grid Reloaded(DFS连通块缩点+BFS求最短路)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5268 题目大意:字符一样并且相邻的即为连通.每次可翻转一个连通块X( ...
- UVA 572 -- Oil Deposits(DFS求连通块+种子填充算法)
UVA 572 -- Oil Deposits(DFS求连通块) 图也有DFS和BFS遍历,由于DFS更好写,所以一般用DFS寻找连通块. 下述代码用一个二重循环来找到当前格子的相邻8个格子,也可用常 ...
- HDU - 1241 POJ - 1562 Oil Deposits DFS FloodFill漫水填充法求连通块问题
Oil Deposits The GeoSurvComp geologic survey company is responsible for detecting underground oil de ...
- DFS求连通块(漫水填充法)
G - DFS(floodfill),推荐 Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I6 ...
- DFS入门之二---DFS求连通块
用DFS求连通块也是比较典型的问题, 求多维数组连通块的过程也称为--“种子填充”. 我们给每次遍历过的连通块加上编号, 这样就可以避免一个格子访问多次.比较典型的问题是”八连块问题“.即任意两格子所 ...
- UVA 572 Oil Deposits油田(DFS求连通块)
UVA 572 DFS(floodfill) 用DFS求连通块 Time Limit:1000MS Memory Limit:65536KB 64bit IO Format: ...
- CGA填充算法之种子填充算法
CGA填充算法之种子填充算法 平面区域填充算法是计算机图形学领域的一个很重要的算法,区域填充即给出一个区域的边界 (也可以是没有边界,只是给出指定颜色),要求将边界范围内的所有象素单元都修改成指定的颜 ...
- 种子填充算法描述及C++代码实现
项目需要看了种子填充算法,改进了算法主要去除面积小的部分.种子填充算法分为两种,简单的和基于扫描线的方法,简单的算法如下描述(笔者针对的是二值图像): (1)从上到下,从左到有,依次扫描每个像素: ( ...
随机推荐
- 转: Lua 语言 15 分钟快速入门
看点: 1. 以很特殊的方式工,把Lua的语法全部输出一段,很容易让人记住..不错 转: http://blog.jobbole.com/70480/
- asp.net中web.config配置节点大全详解【转】
web.config 文件查找规则: (1)如果在当前页面所在目录下存在web.config文件,查看是否存在所要查找的结点名称,如果存在返回结果并停止查找. (2)如果当前页面所在目录下不存在web ...
- ActiveMQ(5.10.0) - Configuring the Simple Authentication Plug-in
The easiest way to secure the broker is through the use of authentication credentials placed directl ...
- sqlserver 公有表达式
了解通用表达式: 为了让代码简洁:在一个查询中引用另外的结果集都是通过视图而不是子查询来进行分解,但是视图是系统级对象,如果数据集仅仅需要在存储过程或是自定义函数中使用一次的话,使用view有些奢侈哈 ...
- sqlserver 测试sql语句执行时间
查看sql语句执行时间/测试sql语句性能 写程序的人,往往需要分析所写的SQL语句是否已经优化过了,服务器的响应时间有多快,这个时候就需要用到SQL的STATISTICS状态值来查看了. 通过设置S ...
- PHP自定义日期英文格式 Feb 11,2015
背景:[PHP小工具]项目中,经常会要求多版本语言支持,而日期也是必不可少的组成元素. 英文日期书写顺序分英式和美式,举例如. 美国:月日年(January 8th,2014 或 January 8, ...
- (转)SQL按照日、周、月、年统计数据
写sql语句分别按日,星期,月,季度,年统计销售额 --按日 select sum(consume),day([date]) from consume_record where year([date] ...
- 工具:linux 性能监控工具-nmon
nmon 下载:http://pan.baidu.com/s/1jICoSpo 放到linux下可以直接运行. nmon 工具可以帮助在一个屏幕上显示所有重要的性能优化信息,并动态地对其进行更新. n ...
- easyui知识累计.递增.
(001) 偶然发现 easyui 1.4.4 版本以下在使用easyloader时的一个bug(声明:只有在使用easyloader加载模块时有此问题) : (只测试过1.4.2, 1.4.3, 1 ...
- Excel常用函数
1.基本的算数函数 sum() average() 2.三角函数 sin() cos() 3.