用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求连通块的更多相关文章

  1. [C++]油田(Oil Deposits)-用DFS求连通块

    [本博文非博主原创,均摘自:刘汝佳<算法竞赛入门经典>(第2版) 6.4 图] [程序代码根据书中思路,非独立实现] 例题6-12 油田(Oil Deposits,UVa572) 输入一个 ...

  2. UVA 572 Oil Deposits油田(DFS求连通块)

    UVA 572     DFS(floodfill)  用DFS求连通块 Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format: ...

  3. UVA 572 dfs求连通块

    The GeoSurvComp geologic survey company is responsible for detecting underground oil deposits. GeoSu ...

  4. HDU1241 Oil Deposits —— DFS求连通块

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1241 Oil Deposits Time Limit: 2000/1000 MS (Java/Othe ...

  5. UVA 572 -- Oil Deposits(DFS求连通块+种子填充算法)

    UVA 572 -- Oil Deposits(DFS求连通块) 图也有DFS和BFS遍历,由于DFS更好写,所以一般用DFS寻找连通块. 下述代码用一个二重循环来找到当前格子的相邻8个格子,也可用常 ...

  6. 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 ...

  7. P1197 [JSOI2008]星球大战 [删边求连通块个数]

    展开 题目描述 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治着整个星系. 某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通过特殊的 ...

  8. POJ-2386.Lakecounting(DFS求连通块)

    本题是一道连通块的入门题,用来练手,后续还会更新连通块的题目. 本题大意:一个n * m 的陆地上面有很多水洼,让你统计水洼的个数并输出. 本题思路:按照顺序遍历陆地,如果发现水洼就将它的八连块都进行 ...

  9. nyoj27-水池数目 (求连通块数目)【dfs】

    http://acm.nyist.net/JudgeOnline/problem.php?pid=27 水池数目 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 南阳 ...

随机推荐

  1. java最简单的方式实现httpget和httppost请求

    java实现httpget和httppost请求的方式多种多样,个人总结了一种最简单的方式,仅仅需几行代码,就能够完美的实现. 此处须要用到两个jar包,httpclient-4.3.1.jar.ht ...

  2. 三星galaxy s4问题解决及快捷操作

    http://blog.csdn.net/pipisorry/article/details/38474827 三星galaxy s4更改锁屏方式时出现故障 屏幕锁定设置除password以外,其它锁 ...

  3. V8::Arguments中This和Holder的区别

    ## v8::Arguments namespace v8 { class Arguments { public:  inline int Length() const;  inline Local& ...

  4. jQuery layer[页面弹出框]

    常见接口如下: 方法名 描述 $.layer({}) 核心接口,参数是一个对象,对象属性参见上述列表.诸如layer.alert()之类的为$.layer()的包装方法. layer.v 获取版本号. ...

  5. Emacs golang 配置

    在配置前需要下载用到的包: godoc godef gocode oracle 在下载包之前需要设置好环境变量: # Golang export GOROOT=$HOME/go export GOPA ...

  6. Android权限机制

    Android系统是运行在Linux内核上的,Android与Linux分别有自己的一套严格的安全及权限机制, 很多像我这样的新手,尤其是习惯了windows低安全限制的用户,很容易在这方面弄混淆,下 ...

  7. 【Android 界面效果21】Android ViewPager使用详解

    这是谷歌官方给我们提供的一个兼容低版本安卓设备的软件包,里面包囊了只有在安卓3.0以上可以使用的api.而viewpager就是其中之一利用它,我们可以做很多事情,从最简单的导航,到页面菜单等等.那如 ...

  8. Gradle实战:发布aar包到maven仓库

    查看原文:http://blog.csdn.net/u010818425/article/details/52441711 Gradle实战系列文章: <Gradle基本知识点与常用配置> ...

  9. Django升级1.6之后出现“Bad Request (400)”错误的解决方案

    Django从1.4升级到1.6之后发现之前的网站都无法访问了,会出现“Bad Request (400)”的错误,搜了半天终于找到了解决办法. 解决方法很简单: 在settings.py里面添加: ...

  10. Linux下配置Java环境变量

    今天开始简单的学习了一下在Linux下安装jdk 写下来总结一下以便后来的查找和复习 首先下载Linux版的jdk我这里使用的jdk1.7:http://download.oracle.com/otn ...