相聚 DFS找01分块输
相聚
https://ac.nowcoder.com/acm/problem/23974
记得把遍历过的点从1变成0
#pragma GCC optimize(2) #include <bits/stdc++.h> #define ll long long #define endl '\n' using namespace std; const int inf=0x3f3f3f; char a[55][55]; int n,m; int dfs(int x,int y) { if(x<1||x>n||y<1||y>m||a[x][y]=='0') return 0; a[x][y]='0'; dfs(x-1,y); dfs(x+1,y); dfs(x,y-1); dfs(x,y+1); return 1; } int main(){ ios::sync_with_stdio(0);cin.tie(0),cout.tie(0); int t;cin>>t; while(t--) { cin>>n>>m; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>a[i][j]; int ans=0; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) ans+=dfs(i,j); cout<<ans<<endl; } return 0; }