首发
2024-05-28 22:27:31
发布于:浙江
6阅读
0回复
0点赞
洛谷传送门 狗家传送门
毕竟普及-,肯定不会太难的虽然我错了两发
dfs的最基础运用---求连通图好吧
真的没什么好说的,上代码吧:
#include<bits/stdc++.h>
using namespace std;
const int nx[12] = {1, 0, -1, 0, 1, -1, 1, -1, 0, 2, 0, -2};
const int ny[12] = {0, 1, 0, -1, 1, 1, -1, -1, 2, 0, -2, 0};
//方向数组,注意,这儿不止8个方向了,由于是曼哈顿距离小于2,故横竖向同理
int n, m, sum = 0;
char mp[105][105];
bool cheak(int x, int y) {
if (x >= 1 && x <= n && y >= 1 && y <= m && mp[x][y] == '#')
return true;
return false;
}//判断函数,可以增加一定代码可读性
void dfs(int x, int y) {
mp[x][y] = '-';//直接修改,就可以节省一个标记数组的空间
for (int i = 0; i < 12; ++i) {//qswl,半年没写dfs,前面写成<=导致错了
int dx=x+nx[i],dy=y+ny[i];
if (cheak(dx, dy)) {
dfs(dx, dy);
}
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);//cin,cout输入输出加速
cin >> n >> m;
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= m; ++j)
cin >> mp[i][j];//输入
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= m; ++j)
if (mp[i][j] == '#') {
dfs(i, j), ++sum;//dfs并sum自增
}
cout << sum << endl;
return 0;
}
广告:
感谢您的阅读,麻烦您的贵手轻抬点个赞,在顺手来我们团队打个卡,谢谢大大!
若有bug欢迎提出
全部评论 1
申请加盟 链接:https://www.acgo.cn/application/1776484607864774656
2024-05-29 来自 北京
0
有帮助,赞一个