POJ-2386.Lakecounting(DFS求连通块)
本题是一道连通块的入门题,用来练手,后续还会更新连通块的题目。
本题大意:一个n * m 的陆地上面有很多水洼,让你统计水洼的个数并输出。
本题思路:按照顺序遍历陆地,如果发现水洼就将它的八连块都进行探索,发现水洼就继续探索,直到一片大水洼都被探索完,就继续进行其他搜索,DFS。
代码:
#include <cstdio>
using namespace std; const int maxn = + ;
char field[maxn][maxn];
int n, m, ans; void dfs(int u, int v) {
field[u][v] = '.';//将正在探索的水洼变为陆地,方便后续查询
for(int dx = -; dx <= ; dx ++) {
for(int dy = -; dy <=; dy ++) {
int nx = u + dx, ny = v + dy;
if(nx >= && nx < n && ny >= && ny < m && field[nx][ny] == 'W')
dfs(nx, ny);
}
}
} int main () {
ans = ;
scanf("%d %d", &n, &m);
getchar();
for(int i = ; i < n; i ++) {
for(int j = ; j < m; j ++)
field[i][j] = getchar();
getchar();
}
for(int i = ; i < n; i ++)
for(int j = ; j < m; j ++)
if(field[i][j] == 'W') {//如果一个地方为水洼,则将和他连在一起的所有水洼都变为陆地,方便后续的统计
dfs(i, j);
ans ++;
}
printf("%d\n", ans);
return ;
}
还有一道题HDU1241和这道题一模一样,建议大家二选一即可。
POJ-2386.Lakecounting(DFS求连通块)的更多相关文章
- DFS入门之二---DFS求连通块
用DFS求连通块也是比较典型的问题, 求多维数组连通块的过程也称为--“种子填充”. 我们给每次遍历过的连通块加上编号, 这样就可以避免一个格子访问多次.比较典型的问题是”八连块问题“.即任意两格子所 ...
- UVA 572 Oil Deposits油田(DFS求连通块)
UVA 572 DFS(floodfill) 用DFS求连通块 Time Limit:1000MS Memory Limit:65536KB 64bit IO Format: ...
- [C++]油田(Oil Deposits)-用DFS求连通块
[本博文非博主原创,均摘自:刘汝佳<算法竞赛入门经典>(第2版) 6.4 图] [程序代码根据书中思路,非独立实现] 例题6-12 油田(Oil Deposits,UVa572) 输入一个 ...
- HDU1241 Oil Deposits —— DFS求连通块
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1241 Oil Deposits Time Limit: 2000/1000 MS (Java/Othe ...
- UVA 572 -- Oil Deposits(DFS求连通块+种子填充算法)
UVA 572 -- Oil Deposits(DFS求连通块) 图也有DFS和BFS遍历,由于DFS更好写,所以一般用DFS寻找连通块. 下述代码用一个二重循环来找到当前格子的相邻8个格子,也可用常 ...
- UVA 572 dfs求连通块
The GeoSurvComp geologic survey company is responsible for detecting underground oil deposits. GeoSu ...
- 用DFS求连通块(种子填充)
[问题] 输入一个m行n列的字符矩阵,统计字符“@”组成多少个八连块.如果两个字符“@”所在的格子相邻(横.竖或者对角线方向),就说它们属于同一个八连块.例如,图6-9中有两个八连块. 图6-9 [分 ...
- 图-用DFS求连通块- UVa 1103和用BFS求最短路-UVa816。
这道题目甚长, 代码也是甚长, 但是思路却不是太难.然而有好多代码实现的细节, 确是十分的巧妙. 对代码阅读能力, 代码理解能力, 代码实现能力, 代码实现技巧, DFS方法都大有裨益, 敬请有兴趣者 ...
- UVa 572 油田(DFS求连通块)
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
随机推荐
- MySQL5.7.20 二进制包无ROOT权限下安装, 滴滴云服务器
01, 下载安装包 => https://dev.mysql.com/downloads/mysql/ 02, 上传到linux系统, 笔者这里使用的 滴滴云服务器 安装在 home/dc2- ...
- LinkedHashMap结构get和put源码流程简析及LRU应用
原理这篇讲得比较透彻Java集合之LinkedHashMap. 本文属于源码阅读笔记,因put,get调用逻辑及链表维护逻辑复杂(至少网上其它文章的逻辑描述及配图,我都没看明白LinkedHashMa ...
- leetcode1024
class Solution(object): def videoStitching(self, clips: 'List[List[int]]', T: int) -> int: li = s ...
- ThinkPHP同时操作多个数据库
除了在预先定义数据库连接和实例化的时候指定数据库连接外,我们还可以在模型操作过程中动态的切换数据库,支持切换到相同和不同的数据库类型.用法很简单, 只需要调用Model类的db方法,用法: $this ...
- oracle 内连接(inner join)、外连接(outer join)、全连接(full join)
转自:https://premier9527.iteye.com/blog/1659689 建表语句: create table EMPLOYEE(EID NUMBER,DEPTID NUMBER,E ...
- Oracle查询表结果添加到另一张表中
转自:https://blog.csdn.net/lx870576109/article/details/78336695 把每一个知识点进行积累:Oracle数据库中将查询一张表的结果添加到另一张表 ...
- Rabbitmq(3) work queues
轮询分发:每个消费者处理的消息是一样的 公平分发:能者多劳 *****公平分发 生产者 package com.aynu.bootamqp.service; import com.aynu.boota ...
- setTimeout闭包常见问题
经常会遇到这样的问题,setTimeout按序输出循环数字,而不是最后输出同一个数字: 题目: for (var i = 0; i < 5; i++) { setTimeout(function ...
- 1037C_ Equalize(字符串)
modify 改变 C. Equalize time limit per test 1 second memory limit per test 256 megabytes input standar ...
- ajax用户名存在检测
一.ajax请求的四个步骤: 1.创建ajax对象 var xmlhttp=new XMLHttpRequest();//IE5,IE6以外的浏览器 var xmlhttp=new ActiveXOb ...