#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;
const int maxn = 100 + 5;
char piece[maxn][maxn];
int n,m,idx[maxn][maxn];
void dfs(int r, int c, int id)
{
if(r<0 || r>=m || c<0 || c>=n) return;
if(idx[r][c] > 0 || piece[r][c]!='@') return;
idx[r][c]=id;
for(int dr=-1; dr<=1;dr++)//dfs式探索
for(int dc=-1;dc<=1;dc++)
if(dr!=0 || dc!=0) dfs(r+dr, c+dc, id);
}
int main(){
while(scanf("%d%d", &m, &n) == 2 && m && n)
{
for(int i=0;i<m;i++)
{
cin>>piece[i];
}
memset(idx, 0 ,sizeof(idx));
int cur=0;
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(idx[i][j]==0 && piece[i][j] == '@')
dfs(i,j,++cur);
}
}
cout<<cur<<endl;
}
return 0;
}
[ACM]Uva572-Oil Deposits-DFS应用
最新推荐文章于 2025-11-24 17:02:03 发布
本文介绍了一个使用深度优先搜索(DFS)算法来标记二维矩阵中连通区域的程序。该程序通过递归方式遍历所有相邻的格子,将相连的'@'字符标记为不同的ID,以此来统计矩阵中有多少个独立的连通区域。文章提供了完整的C++代码实现。
765

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



