题意:多组案例,每组案例输入一个m行n列的字符矩阵,统计字符‘@’组成多少个连通块。如果两个字符‘@’所在的格子相邻(横、竖或对角线),则说明它们属于同一连通块。

//将判断函数直接归在void函数上简化了代码const int maxn=100+5;char mtr[maxn][maxn];
int m,n;
int idx[maxn][maxn];
int X[8]={0,0,1,-1,1,1,-1,-1};
int Y[8]={1,-1,0,0,1,-1,1,-1};void DFS(int x,int y,int id)
{if(x<0||x>=m||y<0||y>=n) return;if(mtr[x][y]!='@'||idx[x][y]>0) return;idx[x][y]=id;for(int i=0;i<8;i++){int xx=x+X[i];int yy=y+Y[i];DFS(xx,yy,id);}
}int main()
{while(cin>>m>>n&&(m!=0||n!=0)){for(int i=0;i<m;i++) cin>>mtr[i];memset(idx,0,sizeof(idx));int cnt=0;for(int i=0;i<m;i++){for(int j=0;j<n;j++){if(idx[i][j]==0&&mtr[i][j]=='@')DFS(i,j,++cnt);}}cout<<cnt<<endl;}return 0;
}

转载于:https://www.cnblogs.com/Fy1999/p/9050361.html

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]AncientMessages象形文字识别 (dfs求连通块)

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

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

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

  4. UVA - 572 Oil Deposits

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

  5. *【ZOJ - 3781】Paint the Grid Reloaded(dfs求连通块缩点,bfs求最短路,建图技巧)

    题干: Leo has a grid with N rows and M columns. All cells are painted with either black or white initi ...

  6. POJ 2386 dfs求连通块

    题目: 由于近期的降雨,雨水汇集在农民约翰的田地不同的地方.我们用一个 的网格图表示.每个网格中有水(W) 或是旱地(.).一个网格与其周围的八个网格相连,而一组相连的网格视为一个水坑.约翰想弄清楚他 ...

  7. UVa 352 - The Seasonal War ( DFS求连通块 )

    思路 基础DFS 和油田那题思路一毛一样 AC代码 #include <iostream> #include <cstdio> #include <cstring> ...

  8. uva 572 Oil Deposits

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

  9. 求连通块个数(使用并查集)

    并查集求连通块个数的模板 #include<bits/stdc++.h>using namespace std;const int maxn = 1e5+5; vector<int& ...

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

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

最新文章

  1. Linux运维跳槽必备的40道面试精华题
  2. 【Qt】qss样式表之:QCalendarWidget,日历窗口样式表设置
  3. 30天敏捷生活(9-11):调整30天的节奏
  4. 当前时间转换的秒数_C++ 日期 amp; 时间
  5. 强强联手 SAP Ariba与苏宁易购共建中国企业智慧采购
  6. 百度之星初赛(A)——T5
  7. 分而治之:Oracle 18c 及 12.2 分区新特性的 N 种优化实践(含PPT)
  8. U-Boot提供的命令【整理】
  9. Visual Graph图形控件的高级应用
  10. Java 代码精简之道 | 凌云时刻
  11. WIFI密码破解笔记
  12. Linux的SSH安装与配置OpenSSH
  13. 隐马尔可夫模型(Hidden Markov Model)
  14. esp32 支持 sd卡 micropython 文件系统_ESP32教程:MicroPython支持-esp文件
  15. 在IE中为abbr标签加样式(转)
  16. vue 不同权限显示不同页面
  17. 五行代码实现图像识别(深入版)
  18. 手写 React 第 2 节 - 初探 React 实现机制
  19. 18719 填涂颜色
  20. 大数据入门学习:SQL与NOSQL数据库

热门文章

  1. [渝粤教育] 山东财经大学 国际经济学 参考 资料
  2. Swift 枚举的用法
  3. 将web项目部署到阿里云服务器上
  4. 【Newtonsoft.Json.dll】操作简单JSON数据
  5. 55)函数指针和其意义
  6. Largest Submatrix SPOJ - MINSUB (单调栈)
  7. [转] 背完这444句英语,你的口语绝对不成问题
  8. 【转】计算机视觉简介
  9. 洛谷 [P2756] 飞行员配对方案问题 网络流实现
  10. linux下安装不同版本的jdk