真·题·再·现
【题目描述】
有一块N
×M
的土地,雨后积起了水,有水标记为W
,干燥为.
。八连通的积水被认为是连接在一起的。请求出院子里共有多少水洼?
【输入描述】
第一行为N,M(1
≤N,M
≤110)
。
下面为N*M
的土地示意图。
【输出描述】
一行,共有的水洼数。
【输入样例】
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
解·题·思·路
【题目分析】
首先由样例可知,这题跟矩阵十分甚至九分的有关;其次因为涉及连通,这题肯定要用到深搜(喜)。
【解题过程】
还事老三样!(喜)
using namespace std;
int main(){
}
首先,声明两个变量n
,m
。
using namespace std;
int n,m;//一定要全局!不然写递归的时候会被撅!(恼)
int main(){
}
然后输入n
和m
,此时需要头文件cstdio
。
#include<cstdio>
using namespace std;
int n,m;//一定要全局!不然写递归的时候会被撅!(恼)
int main(){
scanf("%d %d",&n,&m);
}
声明一个一个一个一个char
类型数组,注意题目要求的数据范围。
#include<cstdio>
using namespace std;
int n,m;//一定要全局!不然写递归的时候会被撅!(恼)
char a[114][514];//数据范围事(1<=n,m<=110),所以数组要声明的大一点(意味深)
int main(){
scanf("%d %d",&n,&m);
}
题目涉及八方向连通(掏出上期导学的知识拓展),所以要声明两个方向数组dx
和dy
。
#include<cstdio>
using namespace std;
int n,m;//一定要全局!不然写递归的时候会被撅!(恼)
char a[114][514];//数据范围事(1<=n,m<=110),所以数组要声明的大一点(意味深)
int dx[]={
1,1,0,-1,-1,-1,0,1};//控制行
int dy[]={
0,1,1,1,0,-1,-1,-1};//控制列
int main(){
scanf("%d %d",&n,&m);
}
全局变量摆好,就可以写递归力!(狂喜)
#include<cstdio>
using namespace std;
int n,m;//一定要全局!不然写递归的时候会被撅!(恼)
char a[114][514];//数据范围事(1<=n,m<=110),所以数组要声明的大一点(意味深)
int dx[]={
1,1