1985. 【普及组模拟赛】家族(family)

1985. 【普及组模拟赛】家族(family)

题目描述
在一个与世隔绝的岛屿上,有一个有趣的现象:同一个家族的人家总是相邻的(这里的相邻是指东南西北四个方向),不同的家族之间总会有河流或是山丘隔绝,但同一个家族的人不一定有相同姓氏。现在给你岛上的地图,求出岛上有多少个不同的家族。岛上的地图有n 行,每行有若干列,每个格子中要么是空格表示大海,要么是‘*’表示河流或山丘,要么是小写字母,表示一户人家的姓氏。

输入
第一行是个数字 N,表示下面信息的行数,接下来是 N 行字符,每行由小写字母和*号组成,有些行的最前面也可能包含若干连续的空格,表示这些区域是大海,每一行最多不超过 200 个字符。

输出
一个数字,表示家族数。

样例输入
在这里插入图片描述
样例输出

3

数据范围限制
10%的数据, n<=1
30%的数据, n<=10
100% 的数据, n<=100 每一行最多不超过 200 个字符

这道题是一道bfs的模板,没想到在某谷上还是道绿题,惊悚!

唯一要考虑一下如何去输入每一行的字符。我们可以用getline();这个函数来输入一整行。

下面是这道题的几个坑
坑一:
在这里插入图片描述gets虽然是一个好东西,但是在竞赛中是不允许的,就这样我失去的AK的机会!!!
坑二:在比赛中,如果内存限制允许,尽量把数组开大!!

#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<string>
#include<algorithm>
#include<vector>
#define fre(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout);
using namespace std;
const int MAX=2147483647;
const int N=1e6;
const int dx[5]={
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值