社区讨论
站外题求条
灌水区参与者 4已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @m67515aq
- 此快照首次捕获于
- 2025/01/22 08:00 去年
- 此快照最后确认于
- 2025/11/04 11:05 4 个月前
题目描述
C⽼师名下的资产有⼀座⼩岛。在这座⼩岛上⽣活的家族有⼀个有趣的现象:同⼀个家族的⼈家总是相邻的这⾥的
相邻是指东南⻄北四个⽅向,不同的家族之间总会有河流或是⼭丘隔绝,但同⼀个家族的⼈不⼀定有相同姓⽒。
现在给你岛上的地图,求出岛上有多少个不同的家族。岛上的地图有⾏,每⾏有若⼲列,每个格⼦中要么是空
格,表示⼤海,要么是“*”,表示河流或⼭丘,要么是⼩写字⺟,表示⼀户⼈家的姓⽒
输入
第⼀⾏⼀个整数数字,表示下⾯信息的⾏数。
接下来是⾏字符,每⾏由⼩写字⺟和"*"号组成,有些⾏的最前⾯也可能包含若⼲连续的空格,表示这些区域是⼤
海,每⼀⾏最多不超过个字符
输出
⼀个数字,表示家族数
对于10%的数据,保证n≤1
对于30%的数据,保证 n≤10
对于100%的数据,保证n≤100且每⼀⾏最多不超过200个字符
CPP#include<bits/stdc++.h>
using namespace std;
int n,cnt;
string a[105];
int fx[4]={1,-1,0,0},fy[4]={0,0,1,-1};
void dfs(int x,int y) {
a[x][y]='*';
for(int i=0;i<4;i++){
int nx=x+fx[i];
int ny=y+fy[i];
if(nx<1||ny<1||nx>n||ny>a[x].size()) continue;
if(!islower(a[nx][ny])) continue;
dfs(nx,ny);
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n;
for(int i=0;i<=n;i++){
getline(cin,a[i]);
}
for(int i=1;i<=n;i++){
for(int j=1;j<=a[i].size();j++){
if(islower(a[i][j])){
dfs(i,j);
cnt++;
}
}
}
cout<<cnt;
return 0;
}
10Pts求条
回复
共 5 条回复,欢迎继续交流。
正在加载回复...