UVa572 Oil Deposits DFS求连通块
技巧:遍历8个方向
- for(int dr = -1; dr <= 1; dr++)
- for(int dc = -1; dc <= 1; dc++)
- if(dr != 0 || dc != 0) dfs(r+dr, c+dc, id);
我的解法:
- #include<cstdio>
- #include<cstring>
- #include<iostream>
- #include<string>
- #include<algorithm>
- using namespace std;
- const int N=102;
- char buf[N][N];
- int m, n;
- int cnt;
- int dr[]={0, 0, 1, 1, 1, -1, -1, -1};
- int dc[]={1, -1, -1, 0, 1, -1, 0, 1};
- void dfs(int r, int c)
- {
- buf[r][c]='*';
- for(int i=0;i<8;i++)
- {
- if(buf[r+dr[i]][c+dc[i]]=='@')
- dfs(r+dr[i], c+dc[i]);
- }
- }
- int main()
- {
- #ifndef ONLINE_JUDGE
- freopen("./uva572.in", "r", stdin);
- #endif
- while(cin>>m>>n && m)
- {
- memset(buf, '*', sizeof buf);
- cnt=0;
- for(int i=1;i<=m;i++)
- {
- cin>>(buf[i]+1);
- }
- for(int i=1;i<=m;i++)
- {
- for(int j=1;j<=n;j++)
- {
- if(buf[i][j]=='@')
- {
- dfs(i, j);
- cnt++;
- }
- }
- }
- cout<<cnt<<endl;
- }
- return 0;
- }
lrj的解法在统计的时候把连通块的序号也求出来了,保存在idx中。
- // UVa572 Oil Deposits
- // Rujia Liu
- // 题意:输入一个字符矩阵,统计字符@组成多少个四连块
- #include<cstdio>
- #include<cstring>
- const int maxn = 100 + 5;
- char pic[maxn][maxn];
- int m, n, idx[maxn][maxn];
- void dfs(int r, int c, int id) {
- if(r < 0 || r >= m || c < 0 || c >= n) return;
- if(idx[r][c] > 0 || pic[r][c] != '@') return;
- idx[r][c] = id;
- for(int dr = -1; dr <= 1; dr++)
- for(int dc = -1; dc <= 1; dc++)
- if(dr != 0 || dc != 0) dfs(r+dr, c+dc, id);
- }
- int main() {
- while(scanf("%d%d", &m, &n) == 2 && m && n) {
- for(int i = 0; i < m; i++) scanf("%s", pic[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 && pic[i][j] == '@') dfs(i, j, ++cnt);
- printf("%d\n", cnt);
- }
- return 0;
- }
UVa572 Oil Deposits DFS求连通块的更多相关文章
- HDU1241 Oil Deposits —— DFS求连通块
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1241 Oil Deposits Time Limit: 2000/1000 MS (Java/Othe ...
- [C++]油田(Oil Deposits)-用DFS求连通块
[本博文非博主原创,均摘自:刘汝佳<算法竞赛入门经典>(第2版) 6.4 图] [程序代码根据书中思路,非独立实现] 例题6-12 油田(Oil Deposits,UVa572) 输入一个 ...
- UVA 572 -- Oil Deposits(DFS求连通块+种子填充算法)
UVA 572 -- Oil Deposits(DFS求连通块) 图也有DFS和BFS遍历,由于DFS更好写,所以一般用DFS寻找连通块. 下述代码用一个二重循环来找到当前格子的相邻8个格子,也可用常 ...
- UVA 572 Oil Deposits油田(DFS求连通块)
UVA 572 DFS(floodfill) 用DFS求连通块 Time Limit:1000MS Memory Limit:65536KB 64bit IO Format: ...
- DFS入门之二---DFS求连通块
用DFS求连通块也是比较典型的问题, 求多维数组连通块的过程也称为--“种子填充”. 我们给每次遍历过的连通块加上编号, 这样就可以避免一个格子访问多次.比较典型的问题是”八连块问题“.即任意两格子所 ...
- UVA 572 dfs求连通块
The GeoSurvComp geologic survey company is responsible for detecting underground oil deposits. GeoSu ...
- 用DFS求连通块(种子填充)
[问题] 输入一个m行n列的字符矩阵,统计字符“@”组成多少个八连块.如果两个字符“@”所在的格子相邻(横.竖或者对角线方向),就说它们属于同一个八连块.例如,图6-9中有两个八连块. 图6-9 [分 ...
- hdu 1241 Oil Deposits(DFS求连通块)
HDU 1241 Oil Deposits L -DFS Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & ...
- DFS:POJ1562-Oil Deposits(求连通块个数)
Oil Deposits Time Limit: 1000MS Memory Limit: 10000K Description The GeoSurvComp geologic survey com ...
随机推荐
- 流媒体相关知识介绍 及其 RTP 应用
一.流媒体简介 随着Internet的日益普及,在网络上传输的数据已经不再局限于文字和图形,而是逐渐向声音和视频等多媒体格式过渡.目前在网络上传输音频/视频(Audio/Video,简称A/V)等多媒 ...
- hdu 1211 RSA
// 表示题目意思我是理解了蛮久 英语太水了 //首先这是解密公式 m=c^d mod n// 给你 p q e 然后 n=p*q fn=(p-1)*(q-1)// 给你 e,根据公式 e*d mod ...
- 3732 Ahui Writes Word
// N个物品 放进容量为C的背包里面 要求价值最大// 一看 第一反应是0 1背包 不过 N=100000 C=10000// 注意到 v,c在 10以内// 那么 最多就100种组合了 然后就转化 ...
- 通过userAgent判断手机浏览器类型
我们可以通过userAgent来判断,比如检测某些关键字,例如:AppleWebKit*****Mobile或AppleWebKit,需要注意的是有些浏览器的userAgent中并不包含AppleWe ...
- Linux User's Manual IOSTAT
IOSTAT(1) Linux User's Manual IOSTAT(1) NAME iostat - Report Central Processing Unit (CPU) statistic ...
- java web 学习十二(session)
一.Session简单介绍 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据时,服务 ...
- Extjs Ext.onReady的用法
最近在学习Extjs,当然首先学习的肯定是从官网下载下来的example. 从学习上而言对于Extjs,我个人认同的是李林峰老师所言先从视图开始,搞一些所见即所得的东西. 废话有点多,对于Extjs而 ...
- android studio 中获取sha1
使用keytool 一.配置环境变量 由于要用到keytool工具,而keytool是jdk里的一个工具,首先将jdk/bin所在的目录加到环境变量的PATH中 看我的keytool所在位置 将所在路 ...
- C/C++:类模板
类模板就是为类声明一种模板,使得类中的某些数据成员,或某些成员函数的参数,又或者是某些成员函数的返回值可以取任意的数据类型,包括基本数据类型和自定义数据类型. 类模板的声明形式如下: template ...
- Codeforces 372
A (被装的袋鼠不可以装的袋鼠)贪心,排序,从n/2分成两部分. B 好一道前缀和的题目. C 标准算法不难想,m^2的算法见http://codeforces.com/blog/entry/9907 ...