北大oj百练-2815:城堡问题

注意点:房间数的++在DFS外,房间大小的++在DFS内部

#include
#include
#include
#define maxn 60
using namespace std;
int R,C;	//R表示行数,C表示列数
int rooms [maxn][maxn];
int color [maxn][maxn];	//方块是否染色过的标记
int maxRoomArea=0,roomNum=0;
int roomArea;
void Dfs(int i, int k)	//i表示上下,k表示左右 
{
	if(color[i][k])
	return ;
	roomArea++;
	color[i][k]=roomNum;//随便赋一个不为0的数 
	if((rooms[i][k]&1)==0) Dfs(i,k-1);//如果西边没墙,向西走
	if((rooms[i][k]&2)==0) Dfs(i-1,k);//向北 
	if((rooms[i][k]&4)==0) Dfs(i,k+1);//向东 
	if((rooms[i][k]&8)==0) Dfs(i+1,k);//向南 
} 
int main()
{
	cin >> R >> C;
	for(int i=1;i<=R;i++)
	{
		for(int k=1;k<=C;k++)
		{
			cin >> rooms[i][k];
		}
	}
	memset(color,0,sizeof(color));
	for(int i=1;i<=R;i++)
	{
		for(int k=1;k<=C;k++)
		{
			if(!color[i][k])
			{
			roomNum++;
			roomArea=0;
			Dfs(i,k);
			maxRoomArea=max(roomArea,maxRoomArea);				
			}
		}
	}
	cout << roomNum <<endl;
	cout << maxRoomArea << endl;
	return 0;
}

你可能感兴趣的:(北大oj百练-2815:城堡问题)