1 条题解
-
0
思路
解码双侧墙位并遍历连通区域,统计房间数和最大面积。
参考程序(C++11)
#include <bits/stdc++.h> using namespace std; int main(){int m,n;cin>>m>>n;vector<vector<int>>a(m,vector<int>(n));for(auto &r:a)for(int &x:r)cin>>x;vector<vector<bool>>v(m,vector<bool>(n));int count=0,best=0;int dx[]={0,-1,0,1},dy[]={-1,0,1,0};for(int i=0;i<m;i++)for(int j=0;j<n;j++)if(!v[i][j]){count++;queue<pair<int,int>>q;q.push({i,j});v[i][j]=true;int size=0;while(!q.empty()){auto p=q.front();q.pop();size++;for(int k=0;k<4;k++){int x=p.first+dx[k],y=p.second+dy[k];if(!(a[p.first][p.second]&(1<<k))&&x>=0&&x<m&&y>=0&&y<n&&!v[x][y]){v[x][y]=true;q.push({x,y});}}}best=max(best,size);}cout<<count<<'\n'<<best<<'\n';}
- 1