题意:给出一个二维房间信息,每个格子的数字表示哪边有墙,用位来表示。求一共有几间屋子(由连通的格子组成),以及最大的房间含有的格子数量。
思路:dfs即可。
#include <cstdio>
#include <string>
#include <vector>
#include <iostream>
#include <cstdlib>
#include <cmath>
#define N 55
using namespace std;
int n,m;
int flag[N][N];
int s[N][N],num = 0,res = 0;
int dfs(int x,int y){
int tmp = 0;
flag[x][y] = num;
if(!(s[x][y]&1)&& !flag[x][y-1])
tmp += dfs(x,y-1);
if(!(s[x][y]&2)&& !flag[x-1][y])
tmp += dfs(x-1,y);
if(!(s[x][y]&4)&& !flag[x][y+1])
tmp += dfs(x,y+1);
if(!(s[x][y]&8)&& !flag[x+1][y])
tmp += dfs(x+1,y);
return tmp+1;
}
int main(){
int i,j,k;
memset(flag,0,sizeof(flag));
scanf("%d %d",&n,&m);
for(i = 1;i<=n;i++)
for(j = 1;j<=m;j++)
scanf("%d",&s[i][j]);
for(i = 1;i<=n;i++)
for(j = 1;j<=m;j++)
if(!flag[i][j]){
num++;
k = dfs(i,j);
res = max(res,k);
}
printf("%d\n%d\n",num,res);
}