深度优先搜索
本题的特点是输入数据直接告诉了图的结点之间是否有边相连,不必要再用邻接矩阵或邻接表去表示
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
#include <string>
#include <iostream>
#include <stack>
#include <math.h>
#include <algorithm>
using namespace std;
int room[65][65];
int ColorRoom[65][65];
int RoomNum=0;//房间个数
int RoomArea=0;
int MaxRoomArea=0;
void Dfs(int i,int j)//从房间(i,j)开始探索
{
if(ColorRoom[i][j]!=0)
{
return;
}
ColorRoom[i][j]= RoomNum;
RoomArea++;
if((room[i][j]&2)==0)
Dfs(i-1,j);
if((room[i][j]&4)==0)
Dfs(i,j+1);
if((room[i][j]&1)==0)
Dfs(i,j-1);
if((room[i][j]&8)==0)
Dfs(i+1,j);
}
int main()
{
int row,col;
cin >>row>>col;
for(int i=1;i<=row;i++)
for(int j=1;j<=col;j++)
cin>>room[i][j];
memset(ColorRoom,0,sizeof(ColorRoom));
for(int i=1;i<=row;i++)
for(int j=1;j<=col;j++)
{
if(ColorRoom[i][j]==0)
{
RoomNum++;
RoomArea = 0;
Dfs(i,j);
MaxRoomArea = max(MaxRoomArea,RoomArea);
}
}
cout<<RoomNum<<endl;
cout<<MaxRoomArea<<endl;
return 0;
}