找出最大的房子

来源:互联网 发布:mac定制双用粉底液c2 编辑:程序博客网 时间:2024/04/28 17:53
//找出最大的房子#include<iostream>#include<stack>#include<cstring>using namespace std;int R,C;//行列数int rooms[60][60];//rooms[i][j]表示[i][j]地方对应的房屋数值 int color[60][60];//方块是否染过颜色标记int maxRoomArea=0,roomNum=0;//最大房间面积,当前已经找的房间的数目 int roomArea; //正在探索的房间的面积void Dfs(int i,int j){    if(color[i][j])return;    ++roomArea;//此方块没有被染色,房间容量增加     color[i][j]=roomNum;//将颜色标记为已经找到的房间的数目    //从这个位置[i][j]向四个方向探索     //&,见0变0,见1不变 //在本题中&1后变为0则表示没有墙,可以走     if((rooms[i][j]&1)==0)Dfs(i,j-1); //向西走     if((rooms[i][j]&2)==0)Dfs(i-1,j); //向北走     if((rooms[i][j]&4)==0)Dfs(i,j+1); //向东走     if((rooms[i][j]&8)==0)Dfs(i+1,j); //向南走 }int main(){    cin>>R>>C;    for(int i=1;i<=R;i++){        for(int j=1;j<=C;j++){            cin>>rooms[i][j];        }    } //输入房间情况    memset(color,0,sizeof(color));//将color全部初始为0//memset只可以设置-1和0//不如fill方便    //查看[i][k]方块是否被染色     for(int i=1;i<=R;i++){        for(int j=1;j<=C;j++){            if(!color[i][j]){//一旦发现新的没有被染色的                 ++roomNum;//房间数增加                 roomArea=0;                Dfs(i,j);//搜索之并染色                 maxRoomArea=max(roomArea,maxRoomArea);            }        }//每次遍历都会使一个房间的所有空间被填色     }      cout<<roomNum<<endl;    cout<<maxRoomArea<<endl;    return 0; }