Discription
给定一个包含@ *的二维数组,输出有几个@是联通的,如果一个@在另外一个@相邻的八个方向则视作相邻。

Input
包含@ *的二维数组。

Output
输出联通的个数

解题思路:
从每一个@格子出发,递归遍历它周围的@格子,每次访问一个格子就给它写上一个“连通分量编号”(vis数组),这样可以在访问之前检查它是否已经有了编号,从而避免同一个格子访问多次。

代码如下:

#include <iostream>
#include <cstring>
using namespace std;
const int N = 110;
char g[N][N];
int n, m;int dx[] = {0, 0, 1, -1, 1, 1, -1, -1};int dy[] = {1, -1, 0, 0, 1, -1, 1, -1};
int vis[N][N];void dfs(int x, int y, int id) {if (x < 0 || x >= n || y < 0 || y >= m)return ;if (vis[x][y] != 0 || g[x][y] != '@')return ;vis[x][y] = id;for (int i = 0; i < 8; i++) {int xx = x + dx[i];int yy = y + dy[i];dfs(xx, yy, id);}
}int main() {while (cin >> n >> m, n, m) {int cnt = 0;for (int i = 0; i < n; i++)cin >> g[i];memset(vis, 0, sizeof(vis));for (int i = 0; i < n; i++)for (int j = 0; j < m; j++)if (vis[i][j] == 0 && g[i][j] == '@')dfs(i, j, ++cnt);cout << cnt << endl;}return 0;
}

UVA - 572 Oil Deposits-dfs找连通块相关推荐

  1. UVa572 Oil Deposits DFS求连通块

    技巧:遍历8个方向 for(int dr = -1; dr <= 1; dr++)for(int dc = -1; dc <= 1; dc++)if(dr != 0 || dc != 0) ...

  2. UVA - 572 Oil Deposits

    /*1. 图也有DFS遍历和BFS遍历,前者用递归实现,后者用队列实现.由于DFS更容易编写,一般用DFS求连通块.求多维数组连通块的过程也称为种子填充2. 一般要尽量避免同一个格子被访问了两次,但是 ...

  3. [uva]AncientMessages象形文字识别 (dfs求连通块)

    非常有趣的一道题目,大意是给你六种符号的16进制文本,让你转化成二进制并识别出来 代码实现上参考了//http://blog.csdn.net/u012139398/article/details/3 ...

  4. uva 572 Oil Deposits

    水题 #include <iostream> #include <cstdio> #define N 103 using namespace std; char w[N][N] ...

  5. DFS求连通块数目(深搜)

    DFS求连通块数目 这里认为,连通块是包括斜对角线的路径连通的块. 测试数据 5 5 ****@ *@@*@ *@**@ @@@*@ @@**@ 计算通过@相连的连通块的个数 测试输出: 2 样例代码 ...

  6. [蓝桥杯2018初赛]全球变暖-dfs,bfs,连通块

    解题思路: bfs:遍历所有未遍历过的陆地,通过bfs计算出当前位置连通陆地的数量cnt,以及被淹没陆地的数量bound,若cnt == bound表示完整淹没的一个岛屿 dfs:将连通块全部标记,如 ...

  7. HDU 2952 Counting Sheep (DFS找联通块)

    题目链接:请戳这里.   题目大意及思路:读懂题意就好了,就是DFS找联通块. 没什么好说的,见代码吧. #include<cstdio> #include<cstring> ...

  8. HDU-1241 Oil Deposits (DFS)

    Oil Deposits Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total ...

  9. UVA572 Oil Deposits DFS求解

    小白书上经典DFS题目. 1. 递归实现 // from: https://www.cnblogs.com/huaszjh/p/4686092.html#include <stdio.h> ...

  10. 【LeetCode - 1254】统计封闭岛屿的数目(dfs,连通块)

    题目链接:https://leetcode-cn.com/problems/number-of-closed-islands/ 有一个二维矩阵 grid ,每个位置要么是陆地(记号为 0 )要么是水域 ...

最新文章

  1. 使用ldirectord实现后端RS健康状态监测及LVS调度功能
  2. 大于等于符号_英语标点符号怎么读,这下全知道了!
  3. 【原创】mysql数据库异常:data truncate for column “*” at row *;data too long *。原因,及解决。...
  4. 使用ThinkPHP扩展,实现Redis的CURD操作。
  5. html背景半透明 字不变,css实现背景半透明文字不透明的效果示例
  6. 远程计算机无法操作,win7系统的QQ远程协助无法控制计算机的问题的解决方法
  7. springboot毕设项目自驾旅游网站的设计与实现gah85(java+VUE+Mybatis+Maven+Mysql)
  8. 小李飞刀 之 程序员版
  9. 中公教育计算机老师笔试面试题,2020下高中信息技术教师资格证面试试题及答案【1月9日下午】...
  10. MyBatis参数绑定
  11. github实用的搜索小技巧
  12. 对文件进行筛选c语言,用c语言实现文本文件中的字符筛选分析。
  13. Mysql数据库报错:Row size too large ( 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DY
  14. 客户关系应该如何管理?
  15. 施耐德电气举办金融数据中心研讨会,“大咖”齐聚共话智慧未来
  16. 新加坡公司和新加坡基金会有什么区别?如何发币
  17. arcgis engine10.2版本 ,狭长面分析,可自定义长宽比例
  18. 使用Python把一堆图片排序后转换成PDF,最终得到一人之下漫画pdf
  19. 360安全卫士与腾讯QQ打得如此火热,引发用户的思考。
  20. 基于STM32的倾斜仪设计(一)—— 硬件设计(1)

热门文章

  1. C语言试题三十七之求除一个2×m整型二维数组中最大元素的值,并将此值返回调用函数。
  2. Makefile的学习
  3. Android之常用开发框架
  4. 【C语言简单说】七:自定义函数(3)
  5. sqlserver建表语句_重新认识MySQL中的COUNT语句
  6. 双网卡上网冲突解决_【技术文章】局域网IP地址冲突罪魁祸首是什么?这几点要注意!(附高手处理方法)...
  7. 贝叶斯分类器_Sklearn 中的朴素贝叶斯分类器
  8. 高一被清华姚班录取,高三委拒谷歌offer,一个重度网瘾少年到理论计算机科学家的蜕变...
  9. Java 常见的 30 个误区与细节!
  10. 盘点那些让程序员目瞪口呆的Bug都有什么?