题解
【入门】黑色联通块
1 条题解
-
0
#include<bits/stdc++.h> using namespace std; int n,b[710][710],sum; char a[710][710]; int nextx[8]={-1,0,1,-1,1,-1,0,1}; int nexty[8]={-1,-1,-1,0,0,1,1,1}; void f(int x,int y,int step){ if(a[x][y]=='1'&&step==0) { sum++; } if(a[x][y]=='1'){ for(int i=0;i<8;i++){ int nx=x+nextx[i]; int ny=y+nexty[i]; if(nx<1||nx>n||ny<1||ny>n) continue; if(b[nx][ny]==0){ b[nx][ny]=1; f(nx,ny,1); } } } } int main(){ cin>>n; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cin>>a[i][j]; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { if(b[i][j]==0){ b[i][j]=1; f(i,j,0); } } cout<<sum; }
- 1