POJ 2386--Lake Counting
2016-08-05 17:21
330 查看
题目:这是题目
题意: Farmer John有一块地,求地里有多少个池塘,水是八方向连通,一个连通块为一个池塘。
水('W')
干陆地 ('.')
思路:从每一个为搜索的水的点八方向搜索,只要能够搜索必有一个池塘,搜索后标记。
题意: Farmer John有一块地,求地里有多少个池塘,水是八方向连通,一个连通块为一个池塘。
水('W')
干陆地 ('.')
思路:从每一个为搜索的水的点八方向搜索,只要能够搜索必有一个池塘,搜索后标记。
#include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> #include <math.h> using namespace std; const int MAX = 105; char _map[MAX][MAX]; bool visit[MAX][MAX]; int n, m; int x[8] = {-1,-1,-1,0,1,1,1,0}; int y[8] = {-1,0,1,1,1,0,-1,-1}; void dfs(int xx, int yy) { for (int i = 0; i < 8; i++) { int xi = xx + x[i]; int yi = yy + y[i]; if (xi >=0 && xi < n && yi >= 0 && yi < m && !visit[xi][yi] && _map[xi][yi] == 'W') {//边界及是否为水 visit[xi][yi] = true; dfs(xi, yi); } } } int main() { while(scanf("%d%d", &n, &m) != EOF) { getchar(); memset(visit, false, sizeof(visit)); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) scanf("%c", &_map[i][j]); getchar(); } int co = 0; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (_map[i][j] == 'W' && !visit[i][j]) {//从每一个未搜索的水点开始 co++; visit[i][j] = true; dfs(i, j); } } } printf("%d\n", co); } return 0; }
相关文章推荐
- 2016多校训练Contest6: 1001 A Boring Question hdu5793
- js创建对象
- 使用 inotify 监控文件系统的活动
- android 图片宽度填满屏幕宽度,图片高度根据图片的比例自动匹配,这样就不会拉伸图片
- 数学之美番外篇:进化论中的概率论
- 深信服与旅馆登记系统
- 处理BOM
- angularjs $location 服务
- tomcat的安装
- H5页面上传图片控件
- js对table的操作
- 1874: 蛤玮学计网(要想到所有情况)
- POJ1256 && 1979 深搜入门
- Java 多线程:分析线程池的实现原理
- Activity四种启动方式
- Java JDBC 之 URL 与数据库连接
- 一个关于NSString内存管理的问题
- winform客户端程序实时读写app.config文件
- Repository 返回 IQueryable?还是 IEnumerable?
- 杭电oj——1106 顺序