poj1164 The Castle

 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 }

//深度优先搜索

原文地址:https://www.cnblogs.com/shihuajie/p/2639564.html