代码:
#include<bits/stdc++.h>
using namespace std;
const int N = 1010;
int n,m;
int a[N][N];
int flag[N][N];
int kong[N][N];
int ways[8][2] = {{1,0},{-1,0},{0,1},{0,-1},{1,-1},{-1,1},{1,1},{-1,-1}};
void dfs(int x, int y){
for(int i=0;i<8;i++){
int dx = x+ways[i][0]; int dy = y+ways[i][1];
if(kong[dx][dy] == 1 && flag[dx][dy] == 0){
flag[dx][dy] = 1;
dfs(dx,dy);
}
}
}
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++){
int way=0;
for(;way<8;way++){
if(a[i+ways[way][0]][j+ways[way][1]] == 1) break;
}
if(way == 7) kong[i][j] = 1;
}
}
int ans=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(kong[i][j] == 1 && flag[i][j] == 0){
flag[i][j] = 1;
dfs(i,j);
ans++;
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(a[i][j] == 1 && kong[i][j] == 1) continue;
int way=0;
for(;way<8;way++){
if(kong[i+ways[way][0]][j+ways[way][1]] == 1){
break;
}
}
if(way == 7) ans++;
}
}
cout<<ans<<endl;
return 0;
}
只会用dfs
路过dalao帮帮忙啊