CF-Robot Factory
#include<iostream> #include<algorithm> #include<vector> using namespace std; const int N=1010; int a[N][N]; bool t[N][N]; int n,m; int dx[]={0,1,0,-1}; int dy[]={-1,0,1,0}; vector<int>x; int dfs(int x,int y) { int sum=1; t[x][y]= true; for(int k=0;k<4;k++) { int i=x+dx[k],j=y+dy[k]; if(!t[i][j]&&(a[x][y]>>k&1)!=1&&i>0&&i<=n&&j>0&&j<=m)sum+=dfs(i,j)//,t[x][y]=true; } return sum; } int main() { cin>>n>>m; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { cin>>a[i][j]; } } for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(!t[i][j]) x.push_back(dfs(i,j)); //t[i][j]=true; } } sort(x.begin(),x.end()); reverse(x.begin(),x.end()); for(int i=0;i<x.size();i++) { cout<<x[i]<<" "; } return 0; }
注意一下在递归前标记所走过的路径和&的优先级小于!=