1 条题解
-
0
思路
只计值1的四连通区域,对角不连通,计数并标记每块所有结点。
参考程序(C++11)
#include <bits/stdc++.h> using namespace std; int main(){int n,m;cin>>n>>m;vector<vector<int>>a(n,vector<int>(m));for(auto &row:a)for(auto &x:row)cin>>x;int ans=0;for(int i=0;i<n;i++)for(int j=0;j<m;j++)if(a[i][j]){ans++;queue<pair<int,int>>q;q.push({i,j});a[i][j]=0;while(!q.empty()){auto p=q.front();q.pop();int di[]={1,-1,0,0},dj[]={0,0,1,-1};for(int k=0;k<4;k++){int x=p.first+di[k],y=p.second+dj[k];if(x>=0&&x<n&&y>=0&&y<m&&a[x][y]){a[x][y]=0;q.push({x,y});}}}}cout<<ans<<'\n';}
- 1