利用DFS求联通块个数
/*572 - Oil Deposits
---DFS求联通块个数:从每个@出发遍历它周围的@。每次访问一个格子就给它一个联通编号,在访问之前,先检查他是否
---已有编号,从而避免了一个格子重复访问多次
--*/
#define _CRT_SECURE_NO_DEPRECATE
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
const int maxn = 100 + 5; char M[maxn][maxn];
int idx[maxn][maxn];
int m, n; void dfs(int r, int c, int id){
if (r < 0 || c < 0 || r >= n || c >= m)return; //出界
if (idx[r][c]>0||M[r][c]!='@')return; //已经访问过,或者不是@
idx[r][c] = id; //该联通分量编号
for (int dr = -1; dr <= 1; dr++){ //扫描它周围的8个方向
for (int dc = -1; dc <= 1; dc++)if (dr || dc)
dfs(dr + r, dc + c, id);
}
}
int main(){
while (scanf("%d%d", &n, &m) && m&&n){
for (int i = 0; i < n; i++) scanf("%s", M[i]); int cnt = 0;
memset(idx, 0, sizeof(idx)); //没有访问
for (int i = 0; i < n;i++)
for (int j = 0; j < m; j++){
//如果当前没有被访问过,并且当前位置字符是@
if (idx[i][j] == 0 && M[i][j] == '@')
dfs(i, j, ++cnt);
}
printf("%d\n", cnt);
}
return 0;
}
利用DFS求联通块个数的更多相关文章
- 【紫书】Oil Deposits UVA - 572 dfs求联通块
题意:给你一个地图,求联通块的数量. 题解: for(所有还未标记的‘@’点) 边dfs边在vis数组标记id,直到不能继续dfs. 输出id及可: ac代码: #define _CRT_SECURE ...
- 用dfs求联通块(UVa572)
一.题目 输入一个m行n列的字符矩阵,统计字符“@”组成多少个八连块.如果两个字符所在的格子相邻(横.竖.或者对角线方向),就说它们属于同一个八连块. 二.解题思路 和前面的二叉树遍历类似,图也有DF ...
- 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. Learning Languages 求联通块的个数
C. Learning Languages 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring&g ...
- DFS入门之二---DFS求连通块
用DFS求连通块也是比较典型的问题, 求多维数组连通块的过程也称为--“种子填充”. 我们给每次遍历过的连通块加上编号, 这样就可以避免一个格子访问多次.比较典型的问题是”八连块问题“.即任意两格子所 ...
随机推荐
- HS 光流法详解
前言 本文较为详细地介绍了一种经典的光流法 - HS 光流法. 光流法简介 当人的眼睛与被观察物体发生相对运动时,物体的影像在视网膜平面上形成一系列连续变化的图像,这一系列变化的图像信息不断 &quo ...
- 修复linux密码
To reset the root password of your server, you will need to boot into single user mode. Access the M ...
- 2.1 Python3.5安装以及爬虫需要的环境配置
之所以选用Python,是因为对于网络爬虫来说,Python是最好上手的一种语言.本文讲述的安装配置都是基于Windows的环境. 另外我想说的是,文中用到的下载链接尽量官方网站上的下载链接,这是我比 ...
- 通过CLI命令将ESXi主机进入维护模式
将主机置于维护模式# vimsh -n -e /hostsvc/maintenance_mode_enter # vim-cmd /hostsvc/maintenance_mode_enter 退出维 ...
- h5页面添加背景音乐
[需求]h5页面添加背景音乐,支持微信.QQ.各种APP. [实现思路]1.通过audio标签,设置自动播放,是一种方法,但是此方法只适合微信.QQ,并不兼容我司的APP,需要主动触发下播放事件. 2 ...
- HDU1285 裸的拓扑排序
拓扑排序: 拓扑排序是应用于有向无回路图(DAG)上的一种排序方式,对一个有向无回路进行拓扑排序后,所有的顶点形成一个序列,对所有边(u,v),满足u在v的前面.该序列说明了顶点表示的事件或 状态发生 ...
- JAVA下几个问题
一.Server MyEclipse Tomcat v8.5 was unable to start within 45 seconds. If the server requires more ti ...
- mysql server5.7 找不到my.ini,只有my-default.ini【mysql全局配置文件】
起因是在尝试将csv文件导入mysql的table时,出现如下错误: “The MySQL server is running with the --secure-file-priv option s ...
- C++的Json解析库:jsoncpp和boost(转)
原文转自 http://blog.csdn.net/hzyong_c/article/details/7163589 JSON(JavaScript Object Notation)跟xml一样也是一 ...
- LPTSTR\LPCTSTR\LPWSTR\LPCWSTR 字母的意思 及 区别
标签: 杂谈 分类: VC char* 是指向ANSI字符数组的指针,其中每个字符占据8位(有效数据是除掉最高位的其他7位),这里保持了与传统的C,C++的兼容. LP的含义 ...