7 条题解
-
0
一个蒟蒻 (戴嘉磊) LV 4 @ 1 个月前 《群山总数》题解 这是一题是一个非常简单的DFS求连通块题目 (简单的我都要吐了) 第一步 看题目 题目详情 首先 定义一个105^2^的数组,两个没啥用的dx、dy数组,还有三个变量n、m和sum。 int dx[4] = { 0,0,1,-1 }; int dy[4] = { 1,-1,0,0 };//两个方向数组 char c[110][110];//保持地图 int n, m, sum;//地图的长、宽,连通块的数量 接下来 先写好用的main函数以及输入 int main() { cin >> n >> m; for (int i = 1;i <= n;i++) for (int j = 1;j <= m;j++) cin >> c[i][j]; }//输入 紧接着 写普通的循环+🔎连通块+输出 for (int i = 1;i <= n;i++) for (int j = 1;j <= m;j++) if (c[i][j] == '#') { sum++;//累加器求和 c[i][j] = '-';//标记 dfs(i, j);//函数搜索标记 }cout << sum << endl; return 0;//随手好习惯 然后 是核心代码————DFS函数 void dfs(int x, int y) { for (int i = 0;i < 4;i++) { int nx = x + dx[i], ny = y + dy[i]; if (nx > 0 && nx <= n && ny > 0 && ny <= m && c[nx][ny] == '#') { c[nx][ny] = '-'; dfs(nx, ny); } } } 最后 晒出整个代码 #include <iostream> using namespace std; int dx[4] = { 0,0,1,-1 }; int dy[4] = { 1,-1,0,0 }; char c[110][110]; int n, m, sum; void dfs(int x, int y) { for (int i = 0;i < 4;i++) { int nx = x + dx[i], ny = y + dy[i]; if (nx > 0 && nx <= n && ny > 0 && ny <= m && c[nx][ny] == '#') { c[nx][ny] = '-'; dfs(nx, ny); } } }int main() { cin >> n >> m; for (int i = 1;i <= n;i++) for (int j = 1;j <= m;j++) cin >> c[i][j]; for (int i = 1;i <= n;i++) for (int j = 1;j <= m;j++) if (c[i][j] == '#') { sum++; c[i][j] = '-'; dfs(i, j); }cout << sum << endl; return 0; } 谢谢大家 (麻烦给个👍呗,求求了) 。
信息
- ID
- 2744
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 5
- 标签
- 递交数
- 57
- 已通过
- 23
- 上传者