用dfs求联通块(UVa572)
一、题目
输入一个m行n列的字符矩阵,统计字符“@”组成多少个八连块。如果两个字符所在的格子相邻(横、竖、或者对角线方向),就说它们属于同一个八连块。
二、解题思路
和前面的二叉树遍历类似,图也有DFS和BFS遍历。由于DFS更容易编写,一般用DFS找联通块:从每个“@”格子出发,递归遍历与之相邻的“@”格子,标记相同的“联通分量标号”。这样在访问之前需检查它是否已经有了编号,从而避免一个格子访问多次。
三、代码实现
#include<stdio.h>
#include<iostream>
using namespace std; const int maxn = + ;
char field[maxn][maxn];
int N, M; void dfs(int x, int y)
{
field[x][y] = '*'; //这里通过把“@”换成“*”,从而避免重复
for (int dx = -; dx <= ; dx++)
for (int dy = -; dy <= ; dy++)
{
int nx = x + dx; int ny = y + dy;
if (nx >= && nx < N && ny >= && ny < M && field[nx][ny] == '@')
dfs(nx, ny);
}
return;
}
void slove()
{
int res = ;
for (int i = ; i < N; i++)
for (int j = ; j < M; j++)
{
if (field[i][j] == '@')
{
dfs(i, j);
res++; //遍历完一个连通分量,答案加一
}
}
printf("%d\n", res);
}
int main()
{
while (scanf("%d%d", &N, &M) == && N)
{
for (int i = ; i < N; i++)
for (int j = ; j < M; j++)
cin >> field[i][j]; slove();
}
return ;
}
用dfs求联通块(UVa572)的更多相关文章
- 利用DFS求联通块个数
/*572 - Oil Deposits ---DFS求联通块个数:从每个@出发遍历它周围的@.每次访问一个格子就给它一个联通编号,在访问之前,先检查他是否 ---已有编号,从而避免了一个格子重复访问 ...
- 【紫书】Oil Deposits UVA - 572 dfs求联通块
题意:给你一个地图,求联通块的数量. 题解: for(所有还未标记的‘@’点) 边dfs边在vis数组标记id,直到不能继续dfs. 输出id及可: ac代码: #define _CRT_SECURE ...
- HDU - 1213 dfs求联通块or并查集
思路:给定一个无向图,判断有几个联通块. AC代码 #include <cstdio> #include <cmath> #include <algorithm> ...
- 中矿新生赛 H 璐神看岛屿【BFS/DFS求联通块/连通块区域在边界则此连通块无效】
时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32768K,其他语言65536K64bit IO Format: %lld 题目描述 璐神现在有张n*m大小的地图,地图上标明了陆地(用 ...
- K - Ancient Messages(dfs求联通块)
K - Ancient Messages Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Subm ...
- POJ 1562 Oil Deposits (并查集 OR DFS求联通块)
Oil Deposits Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 14628 Accepted: 7972 Des ...
- Educational Codeforces Round 1D 【DFS求联通块】
http://blog.csdn.net/snowy_smile/article/details/49924965 D. Igor In the Museum time limit per test ...
- [C++]油田(Oil Deposits)-用DFS求连通块
[本博文非博主原创,均摘自:刘汝佳<算法竞赛入门经典>(第2版) 6.4 图] [程序代码根据书中思路,非独立实现] 例题6-12 油田(Oil Deposits,UVa572) 输入一个 ...
- DFS入门之二---DFS求连通块
用DFS求连通块也是比较典型的问题, 求多维数组连通块的过程也称为--“种子填充”. 我们给每次遍历过的连通块加上编号, 这样就可以避免一个格子访问多次.比较典型的问题是”八连块问题“.即任意两格子所 ...
随机推荐
- 玲珑OJ1088【蜜汁尺取】
前言(膜法): 早上10点多开始膜的,然后到中午交了一发,感觉膜法不对啊!然后就兴起小窗了一发管理员,然后管理员给我发了in,out数据...可是太大并没有什么可取性... 还是自己试,然后发现自己搞 ...
- U3D手游《苍穹变》性能优化经验谈
4月11日,由unity公司举办的Unite 2016大会在上海正式举行,在4月12日的案例分享专场会议上,天神互动U3D高级开发工程师康凯以手游<苍穹变>为例讲述了3DMMOARPG游戏 ...
- CF939D Love Rescue
题意 给定两个长度为n的由小写字母组成的字符串 每次可以花费1的代价,指定两个字母,把其中一个全部变为另一个 求使两个字符串相同的最小花费 n <= 100000 因为谁变成谁没有关系反正相等就 ...
- docker+jenkins实现持续集成
持续集成的概念我就不多说了,网上一大堆,今日主要讲讲怎么通过docker 和jenkins实现项目的持续集成.看着简单,网上完整教程很少,本人摸索很久才搞定!!! 一.首先安装docker.安装过程可 ...
- 干货:排名前16的Java工具类
在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码. 一. ...
- IP服务-6-SNMP
SNMP(简单网络管理协议) SNMP更为正式的说法是互联网标准管理框架(Internet Standard Management Framework).在这个协议架构中.被管理的设备(SNMP代理) ...
- ShareSDK集成遇到问题
解决方案
- IMG 的alt和title的区别(转自 百度空间--路云的世界)
图片标签img中alt与title的区别 图片标签img中alt与title的区别 可能很多新手在做站内优化的时候,不明白图片标签img中alt与title的区别,今天为大家说一下其中的区别. 大家可 ...
- android的handle
Handler的定义: 用来接收子线程发送过来的数据,并利用该数据直接更新主线程的UI. 安卓中,一个应用启动时会开启一个主线程(UI线程),他的责任是负责管理界面中的控件.比如当你点击一个Butt ...
- 创建Maven项目出错 pom出错
错误为 org.apache.maven.archiver.MavenArchiver.getManifest(org.apache.maven.project.MavenProject, org.a ...