题意:给定一个区域,求*表示的最大连续区域大小。连续只包括水平和垂直,对角不算。
思路:dfs
输入:
10 5
..*.....**
.**..*****
.*...*....
..****.***
..****.***
输出:
16
#include <stdio.h>
#include <string.h>
#define N 1002
#define M 1002
int n,m;
char s[N][M];
int round[4][2] = {-1,0,0,1,1,0,0,-1};
int check(int x,int y){//判断搜索到的位置是否合理
return x>=0 && y>=0 && x<n && y<m;
}
int dfs(int x, int y){
int i,res=1;
s[x][y] = '.';
for(i = 0;i<4;i++){
int xx = x+round[i][0];
int yy = y+round[i][1];
if(check(xx,yy) && s[xx][yy] == '*')
res += dfs(xx,yy);
}
return res;
}
int main(){
while(scanf("%d %d",&m,&n)!=EOF){
int i,j,res,max=0;
for(i = 0;i<n;i++)
scanf("%s",s[i]);
for(i = 0;i<n;i++)
for(j = 0;j<m;j++)
if(s[i][