qwq晚来了
2025-05-31 21:28:12
发布于:广东
0阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
const int Carribean[4]={2,4,8,16},xylophone[4][2]={{0,-1},{1,0},{0,1},{-1,0}};
int n,m,g[1001][1001],a[1000001],num;
bool vis[1001][1001];
int bfs(int x,int y){
if(vis[x][y])return 0;
queue<pair<int,int>>q;
q.push(make_pair(x,y));
vis[x][y]=1;
int cnt=1;
while(!q.empty()){
pair<int,int>tmp;
tmp=q.front();
q.pop();
for(int i=0;i<4;++i){
int xx=tmp.first+xylophone[i][0],yy=tmp.second+xylophone[i][1];
if(!vis[xx][yy]&&xx<=n&&yy<=m&&!((g[tmp.first][tmp.second]%Carribean[i])>>i)&&!((g[xx][yy]%Carribean[(i+2)%4])>>((i+2)%4))){
q.push(make_pair(xx,yy));
vis[xx][yy]=1;
cnt++;
}
}
}
return cnt;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
scanf("%d",&g[i][j]);
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j){
int r=bfs(i,j);
if(r)a[++num]=r;
}
sort(a+1,a+num+1);
for(int i=num;i>=1;--i)cout<<a[i]<<" ";
return 0;
}
这里空空如也
有帮助,赞一个