1 #include<stdio.h> 2 int modules,p[50][50]; 3 bool visit[50][50]; 4 void search(int i,int j) 5 { 6 if(visit[i][j])//已经遍历过,不再遍历 7 return; 8 visit[i][j]=1;//标志已访问 9 modules++;//块数加一 10 if(!(p[i][j]&8))//判断有没有南墙 11 search(i+1,j); 12 if(!(p[i][j]&4))//判断有没有东墙 13 search(i,j+1); 14 if(!(p[i][j]&2))//判断有没有北墙 15 search(i-1,j); 16 if(!(p[i][j]&1))//判断有没有西墙 17 search(i,j-1); 18 } 19 int main() 20 { 21 int i,j,r,c,max,rooms; 22 while(~scanf("%d%d",&r,&c)){ 23 for(i=0;i<r;++i) 24 for(j=0;j<c;++j){ 25 scanf("%d",&p[i][j]); 26 visit[i][j]=0;//初始化 27 } 28 for(max=rooms=i=0;i<r;++i) 29 for(j=0;j<c;++j){ 30 modules=0; 31 search(i,j); 32 if(modules) rooms++;//假如找到一个新房间,rooms+1 33 if(modules>max) max=modules;//更新max 34 } 35 printf("%d\n%d\n",rooms,max); 36 } 37 return 0; 38 }
//深度优先搜索