博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Lake Counting
阅读量:5296 次
发布时间:2019-06-14

本文共 1098 字,大约阅读时间需要 3 分钟。

 

试题描述

有一个大小为M*N的园子,雨后积起了水。八连通的积水被认为是连接在一起的。请求出园子里共有多少水洼?(八连通指的是下面图中相对W的*的部分)

***
*W*
***
限制条件:
N,M≤100

输入
第一行包含两个正整数 N 和 M,表示将一个园子地面分成N*M块方格,N 行,M列,接下来的 N 行描述了园子地面状况,其中‘W’表示积水的水洼,‘.’表示没有积水。
输出
仅一个数,表示水洼的总数。
输入示例
10 12
w........ww.
.www.....www
....ww...ww.
.........ww.
.........w..
..w......w..
.w.w.....ww.
w.w.w.....w.
.w.w......w.
..w.......w.
输出示例
3
 

其实就是八连块。用dfs(即深度搜索)可以解决。

1 #include 
2 #define MAXN 101 3 using namespace std; 4 char a[MAXN][MAXN]; 5 int m,n,flag[MAXN][MAXN]; 6 7 void dfs(int i,int j,int id) //dfs函数每运行一次,答案(即cnt)++; 8 { 9 if(i<0||i>=m||j<0||j>=n) return; //如果出界,退出递归 10 if(flag[i][j]>0||a[i][j]!='w') return; //如果当前格子搜索过或者不是水洼,退出递归 11 flag [i][j]=id;//记录当前格子被访问过 12 dfs(i-1,j-1,id); //开始八连块 13 dfs(i-1,j,id);14 dfs(i-1,j+1,id);15 dfs(i,j-1,id);16 dfs(i,j+1,id);17 dfs(i+1,j-1,id);18 dfs(i+1,j,id);19 dfs(i+1,j+1,id);20 }21 int main()22 {23 int j,i,cnt=0;24 cin>>m>>n;25 for(i=0;i
>a[i][j];27 for(i=0;i
Lake Counting

 

转载于:https://www.cnblogs.com/YXY-1211/p/5166464.html

你可能感兴趣的文章
ExtJS学习之路第一步:对比jQuery,认识ExtJS
查看>>
Leetcode 268 Missing Number
查看>>
00-自测1. 打印沙漏
查看>>
UNITY在VS中调试
查看>>
福建省第八届 Triangles
查看>>
P1182 数列分段`Section II` P1316 丢瓶盖 二分答案
查看>>
更新下载库update绝对详解
查看>>
SDUTOJ3754_黑白棋(纯模拟)
查看>>
Scala入门(1)Linux下Scala(2.12.1)安装
查看>>
laravel
查看>>
installing the matplotlib via pip in the enviroment dos
查看>>
bzoj3312: [Usaco2013 Nov]No Change
查看>>
如何改善下面的代码 领导说了很耗资源
查看>>
Quartus II 中常见Warning 原因及解决方法
查看>>
高德地图 – 1.问题集锦
查看>>
php中的isset和empty的用法区别
查看>>
ajax VS websocket
查看>>
Android ViewPager 动画效果
查看>>
Android ijkplayer详解使用教程
查看>>
Android UI-仿微信底部导航栏布局
查看>>