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]={