dfs题目
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int w,h;
char map[1010][100];
int num;
int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
void dfs(int t,int u)
{
int i,a,b;
num++;
map[t][u]='.';
for(i=0;i<4;i++)
{
a=t+dir[i][0];
b=u+dir[i][1];
if((a>=0)&&(a<h)
&&(b>=0)&&(b<w)
&&(map[a][b]=='*'))
{
dfs(a,b);
}
}
}
int main()
{
int i,j;
int max;
scanf("%d%d",&w,&h);
memset(map,0,sizeof(map));
num=max=0;
for(i=0;i<h;i++)
{
scanf("%s",map[i]);
}
for(i=0;i<h;i++)
{
for(j=0;j<w;j++)
{
if(map[i][j]=='*')
{
dfs(i,j);
if(num>max)
{
max=num;
}
num=0;
}
}
}
printf("%d\n",max);
return 0;
}
本文介绍了一个基于深度优先搜索(DFS)的算法实现,该算法用于在一个二维字符数组中寻找连通的'*'字符区域,并统计每个连通区域的大小。通过递归地遍历所有相邻的'*'字符,算法能够找到最大的连通区域。
1378

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



