AcWing 5015. 寻宝图
原题链接
中等
作者:
东河dd
,
2024-04-19 16:45:40
,
所有人可见
,
阅读 9
#include<iostream>
using namespace std;
string a[100100];//string解决开不了二维数组的问题
int dx[4] = {1, 0, -1, 0}, dy[4] = {0, 1, 0, -1};
int n, m, cnt, ccnt;
bool flag = false;
void dfs(int x, int y){
if(a[x][y] == '0')return;
if(a[x][y] != '1')flag = true;//存在宝藏的话赋值为true
a[x][y] = '0';//赋值为'0',防止重复搜索
for(int i = 0;i < 4;i++){
int xx = x + dx[i], yy = y + dy[i];
if(xx < 1 || yy < 1 || xx > n || yy > m)continue;
if(a[xx][yy] >= '1')dfs(xx, yy);
}
}
int main(){
cin >> n >> m;
for(int i = 1;i <= n;i++){
cin >> a[i];
a[i] = " " + a[i];
}
for(int i = 1;i <= n;i++){
for(int j = 1; j<= m;j++){
if(a[i][j] != '0'){
flag = 0;
cnt++;//遇到岛屿
dfs(i, j);
if(flag)ccnt++;
}
}
}
cout << cnt << ' '<< ccnt;
}