Satellite Photographs(DFS求最大相连块面积)
题目链接http://openoj.awaysoft.com/JudgeOnline/problem.php?id=1104
1 #include<stdio.h> 2 #include<string.h> 3 int vis[1100][100]; 4 char ma[1100][100]; 5 //在进行遍历时,对不同的区域做不同标记(标记值为k) 6 void dfs(int x,int y,int k) 7 { 8 if(vis[x][y]||ma[x][y]=='.'||!ma[x][y])return; 9 vis[x][y]=k; 10 dfs(x-1,y,k); 11 dfs(x,y-1,k); dfs(x,y+1,k); 12 dfs(x+1,y,k); 13 } 14 int main() 15 { 16 int m,n; 17 while(~scanf("%d%d",&m,&n)) 18 { 19 int i; 20 memset(vis,0,sizeof(vis));//vis,ma都全部赋值为0 21 memset(ma,0,sizeof(ma)); 22 for(i=1;i<=n;i++) 23 scanf("%s",&ma[i][1]); 24 //遍历,标记与赋值 25 int key=1,j; 26 for(i=1;i<=n;i++) 27 for(j=1;j<=m;j++) 28 if(!vis[i][j]&&ma[i][j]=='*')dfs(i,j,key++); 29 //aa[]数组用于存放不同标记值的元素个数 30 int aa[100000]={0}; 31 for(i=1;i<=n;i++) 32 for(j=1;j<=m;j++) 33 if(vis[i][j])aa[vis[i][j]]++; 34 //找出最大个数 35 int max=0; 36 for(i=1;i<key;i++)if(aa[i]>max)max=aa[i]; 37 38 printf("%d\n",max); 39 } 40 return 0; 41 }