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 }

//深度优先搜索

你可能感兴趣的:(cast)