最简单的板子题,摸清dfs套路就好,不用剪枝,不用优化,dfs的模板在我博客的搜索模块里找。
#include <iostream>
#include <cstring>
#include <ctime>
using namespace std;
const int maxn = 105;
int ans;
int n, m;
char Map[maxn][maxn];
int a[] = {1, -1, 0, 0, 1, 1, -1, -1};
int b[] = {0, 0, 1, -1, 1, -1, 1, -1};
void dfs(int x, int y)
{
Map[x][y] = '*';
for (int i = 0; i < 8; i++) {
int xx = x+a[i];
int yy = y+b[i];
if (xx >= 0 && xx < n && yy >= 0 && yy < m && Map[xx][yy] == '@') dfs(xx, yy);
}
}
int main()
{
ios::sync_with_stdio(false);
while (cin >> n >> m) {
if (!n && !m) break;
for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) cin >> Map[i][j];
ans = 0;
for (int i = 0;i < n; i++) {
for (int j = 0; j < m; j++) {
if (Map[i][j] == '@') {ans++; dfs(i, j);}
}
}
cout << ans << endl;
}
return 0;
}
本文深入浅出地讲解了深度优先搜索(DFS)算法的基本原理和应用,通过一个简单的板子题实例,演示了如何使用DFS算法进行遍历和搜索。文章提供了完整的C++代码实现,包括dfs函数的定义和调用,以及输入输出处理。适用于初学者快速掌握DFS算法的使用。
857

被折叠的 条评论
为什么被折叠?



