#include <bits/stdc++.h>
using namespace std;
int m,n;
char str[105][105];
void dfs(int x,int y) //递归,当前坐标位置
{
if(x<0||x>=m||y<0||y>=n) //超过搜索的范围(越界),直接返回
return ;
if(str[x][y]=='@') //如果该点满足条件,就搜索8个方向
{
str[x][y]='*'; //首先赋值为'*',表示搜索过
dfs(x-1,y);
dfs(x-1,y+1);
dfs(x,y+1);
dfs(x+1,y+1);
dfs(x+1,y);
dfs(x+1,y-1);
dfs(x,y-1);
dfs(x-1,y-1);
}
}
int main()
{
while(scanf("%d %d",&m,&n)&&(m+n))
{
int sum=0;
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
cin>>str[i][j];
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(str[i][j]=='@')
{
dfs(i,j);
sum++;
}
}
}
cout<<sum<<endl;
}
return 0;
} 搜索dfs-hdu Oil Deposits
深度优先搜索算法示例
最新推荐文章于 2025-12-05 10:55:08 发布
本文介绍了一个使用深度优先搜索(DFS)算法解决的具体问题实例。通过递归方式实现,遍历二维数组中指定字符的所有相邻位置,并将其标记已访问状态,避免重复搜索。文章详细展示了如何统计地图上独立岛屿的数量。
505

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



