1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
| #include<bits/stdc++.h> #define int long long using namespace std; #define endl '\n' const int N=55; typedef pair<int,int>pp; int num[N][N]; int m,n; int d[8][2]={{0,-1},{0,1},{-1,0},{1,0},{-1,-1},{-1,1},{1,-1},{1,1}}; bool check(int x,int y){ return x>=0&&x<=m+1&&y>=0&&y<=n+1; } void dfs1(int x,int y){ num[x][y]=2; for(int i=0;i<8;++i){ int tx=x+d[i][0],ty=y+d[i][1]; if(num[tx][ty]==0&&check(tx,ty)){ dfs1(tx,ty); } } } void dfs2(int x,int y){ num[x][y]=2; for(int i=0;i<4;++i){ int tx=x+d[i][0],ty=y+d[i][1]; if(num[tx][ty]==1&&check(tx,ty)){ dfs2(tx,ty); } } } void solve() { cin>>m>>n; for(int i=0;i<=m+1;++i){ for(int j=0;j<=n+1;++j){ num[i][j]=0; } } for(int i=1;i<=m;++i){ string str; cin>>str; for(int j=1;j<=n;++j){ num[i][j]=str[j-1]-'0'; } } dfs1(0,0); for(int i=1;i<=m;++i){ for(int j=1;j<=n;++j){ if(!num[i][j])num[i][j]=1; } } int ans=0; for(int i=1;i<=m;++i){ for(int j=1;j<=n;++j){ if(num[i][j]==1){ ++ans; dfs2(i,j); } } } cout<<ans<<endl; } signed main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int T=1; cin>>T; while(T--) solve(); return 0; }
|