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 描述 南阳 ...
随机推荐
- java最简单的方式实现httpget和httppost请求
java实现httpget和httppost请求的方式多种多样,个人总结了一种最简单的方式,仅仅需几行代码,就能够完美的实现. 此处须要用到两个jar包,httpclient-4.3.1.jar.ht ...
- 三星galaxy s4问题解决及快捷操作
http://blog.csdn.net/pipisorry/article/details/38474827 三星galaxy s4更改锁屏方式时出现故障 屏幕锁定设置除password以外,其它锁 ...
- V8::Arguments中This和Holder的区别
## v8::Arguments namespace v8 { class Arguments { public: inline int Length() const; inline Local& ...
- jQuery layer[页面弹出框]
常见接口如下: 方法名 描述 $.layer({}) 核心接口,参数是一个对象,对象属性参见上述列表.诸如layer.alert()之类的为$.layer()的包装方法. layer.v 获取版本号. ...
- Emacs golang 配置
在配置前需要下载用到的包: godoc godef gocode oracle 在下载包之前需要设置好环境变量: # Golang export GOROOT=$HOME/go export GOPA ...
- Android权限机制
Android系统是运行在Linux内核上的,Android与Linux分别有自己的一套严格的安全及权限机制, 很多像我这样的新手,尤其是习惯了windows低安全限制的用户,很容易在这方面弄混淆,下 ...
- 【Android 界面效果21】Android ViewPager使用详解
这是谷歌官方给我们提供的一个兼容低版本安卓设备的软件包,里面包囊了只有在安卓3.0以上可以使用的api.而viewpager就是其中之一利用它,我们可以做很多事情,从最简单的导航,到页面菜单等等.那如 ...
- Gradle实战:发布aar包到maven仓库
查看原文:http://blog.csdn.net/u010818425/article/details/52441711 Gradle实战系列文章: <Gradle基本知识点与常用配置> ...
- Django升级1.6之后出现“Bad Request (400)”错误的解决方案
Django从1.4升级到1.6之后发现之前的网站都无法访问了,会出现“Bad Request (400)”的错误,搜了半天终于找到了解决办法. 解决方法很简单: 在settings.py里面添加: ...
- Linux下配置Java环境变量
今天开始简单的学习了一下在Linux下安装jdk 写下来总结一下以便后来的查找和复习 首先下载Linux版的jdk我这里使用的jdk1.7:http://download.oracle.com/otn ...