DFS入门之二---DFS求连通块
用DFS求连通块也是比较典型的问题, 求多维数组连通块的过程也称为--“种子填充”。
我们给每次遍历过的连通块加上编号, 这样就可以避免一个格子访问多次。比较典型的问题是”八连块问题“。即任意两格子所在位置相邻(上下左右对角共八个方位),则在一个连通块。典型例题:HDU 1241 Oil Deposits
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1241
题目描述:输入m行n列的字符矩阵, 统计字符“@”组成八连块的个数。
题意分析:读入数据 -> 通过二重循环遍历该图->遇到‘@’且没有被访问过->DFS其连通块并作标记->输出
代码(仅供参考):
#include <cstdio>
#include <cstring>
const int maxn = + ;
char a[maxn][maxn];
int n, m, idx[maxn][maxn]; void dfs(int r, int c, int id)
{
if(r < || r >= m || c < || c >= n) return ;
if(idx[r][c] > || a[r][c] != '@') return ;
idx[r][c] = id;
for(int i = -; i <= ; i++)
for(int j = -; j <= ; j++)
if(i != || j != ) dfs(r+i, c+j, id);
} int main()
{
while(~scanf("%d%d", &m, &n)){
if(n == && m == ) break;
for(int i = ; i < m; i++) scanf("%s", a[i]);
memset(idx, , sizeof(idx));
int cnt = ;
for(int i = ; i < m; i++)
for(int j = ; j < n; j++)
if(idx[i][j] == && a[i][j] == '@') dfs(i, j, ++cnt);
printf("%d\n", cnt);
}
return ;
}
DFS入门之二---DFS求连通块的更多相关文章
- [C++]油田(Oil Deposits)-用DFS求连通块
[本博文非博主原创,均摘自:刘汝佳<算法竞赛入门经典>(第2版) 6.4 图] [程序代码根据书中思路,非独立实现] 例题6-12 油田(Oil Deposits,UVa572) 输入一个 ...
- UVA 572 Oil Deposits油田(DFS求连通块)
UVA 572 DFS(floodfill) 用DFS求连通块 Time Limit:1000MS Memory Limit:65536KB 64bit IO Format: ...
- UVA 572 dfs求连通块
The GeoSurvComp geologic survey company is responsible for detecting underground oil deposits. GeoSu ...
- HDU1241 Oil Deposits —— DFS求连通块
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1241 Oil Deposits Time Limit: 2000/1000 MS (Java/Othe ...
- UVA 572 -- Oil Deposits(DFS求连通块+种子填充算法)
UVA 572 -- Oil Deposits(DFS求连通块) 图也有DFS和BFS遍历,由于DFS更好写,所以一般用DFS寻找连通块. 下述代码用一个二重循环来找到当前格子的相邻8个格子,也可用常 ...
- C. Edgy Trees Codeforces Round #548 (Div. 2) 并查集求连通块
C. Edgy Trees time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
- P1197 [JSOI2008]星球大战 [删边求连通块个数]
展开 题目描述 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治着整个星系. 某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通过特殊的 ...
- POJ-2386.Lakecounting(DFS求连通块)
本题是一道连通块的入门题,用来练手,后续还会更新连通块的题目. 本题大意:一个n * m 的陆地上面有很多水洼,让你统计水洼的个数并输出. 本题思路:按照顺序遍历陆地,如果发现水洼就将它的八连块都进行 ...
- nyoj27-水池数目 (求连通块数目)【dfs】
http://acm.nyist.net/JudgeOnline/problem.php?pid=27 水池数目 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 南阳 ...
随机推荐
- windows 支持curl命令
curl 是一般linux发行版中都带有的小工具,利用这个工具可以很方便的下载文件, 我一般使用这个工具来查看某个页面相应的HTTP头信息,在Windows系统中我们也一样可以使用这个工具,如果不需要 ...
- MySQL执行SHOW STATUS查询服务器状态状态之Handler_read_* 详解
在MySQL里,我们一般使用SHOW STATUS查询服务器状态,语法一般来说如下: SHOW [GLOBAL | SESSION] STATUS [LIKE ‘pattern’ | WHERE ex ...
- Android实现数据存储技术
转载:Android实现数据存储技术 本文介绍Android中的5种数据存储方式. 数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是: 1 使用Shar ...
- GNU C/C++ __attributes__ GCC中的弱符号与强符号
最近在看一些源代码,遇到了一些使用__attribute__修饰函数和变量的属性方面的代码,不是太了解,很是汗颜,再此做个总结: GCC使用__attribute__关键字来描述函数,变量和数据类 ...
- Win7下安装Apache+PHP+phpMyAdmin+wordpress+drupal+discuz
[Apache] Listen 90 DocumentRoot "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs&q ...
- LeetCode39 Combination Sum
题目: Given a set of candidate numbers (C) and a target number (T), find all unique combinations in C ...
- jquery学习笔记2
1.点击时文字消失,失去焦点时文字再出现 <input type="text" value="郭强" onfocus="if(value=='郭 ...
- 基于http协议的api接口对于客户端的身份认证方式以及安全措施
由于http是无状态的,所以正常情况下在浏览器浏览网页,服务器都是通过访问者的cookie(cookie中存储的jsessionid)来辨别客户端的身份的,当客户端进行登录服务器也会将登录信息存放在服 ...
- 《Cortex-M0权威指南》之体系结构---系统模型
转载请注明来源:cuixiaolei的技术博客 Cortex-M0体系结构包括:系统模型.存储器映射.异常中断.这篇文章主要讲解Cortex-M0的系统模型. 操作模式和状态 如上图所示,Cortex ...
- 《MFC游戏开发》笔记八 游戏特效的实现(二):粒子系统
本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9360993 作者:七十一雾央 新浪微博:http:// ...