![](https://img-blog.csdn.net/20150314110043814?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbHVja2lseXdt/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](https://img-blog.csdn.net/20150314110050023?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbHVja2lseXdt/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<algorithm>
using
namespace
std;
#define max(a,b) ((a)>(b)?(a):(b))
#define N 1005
int
area;
int
ans;
int
n,m;
//n行m列
char
mpt[N][N];
int
dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
void
DFS(
int
x,
int
y)
//(x,y)表示坐标、now表示当前面积
{
for
(
int
i=0;i<4;i++)
//四个方向
{
int
tx=x+dir[i][0];
int
ty=y+dir[i][1];
//下一步的坐标
//如果下一步可以走、面积加1、再从下一个点开始搜索
if
(tx>=1 && tx<=n && ty>=1 && ty<=m && mpt[tx][ty]==
'*'
)
{
area++;
mpt[tx][ty]=
'.'
;
DFS(tx,ty);
}
}
}
int
main()
{
int
i,j;
while
(
scanf
(
"%d%d"
,&m,&n)!=EOF)
{
ans=-1;
getchar
();
for
(i=1;i<=n;i++)
{
for
(j=1;j<=m;j++)
{
scanf
(
"%c"
,&mpt[i][j]);
}
getchar
();
}
for
(i=1;i<=n;i++)
{
for
(j=1;j<=m;j++)
{
if
(mpt[i][j]==
'*'
)
{
area=1;
mpt[i][j]=
'.'
;
DFS(i,j);
ans=max(ans,area);
}
}
}
printf
(
"%d\n"
,ans);
}
return
0;
}
本题就是一种简单的DFS搜索问题。注意运用DFS规划好方向就可以了。