提交记录:https://www.luogu.com.cn/record/164848238
代码
#include<bits/stdc++.h>
using namespace std;
int n,m,a[1001][1001],ans=0;
int dx[8]={-1,-1,-1,0,0,1,1,1};
int dy[8]={-1,0,1,-1,1,-1,0,1};
void jdfs(int x,int y)
{
int p=1;
for(int i=0;i<8;i++)
{
int nx=x+dx[i];
int ny=y+dy[i];
if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&a[nx][ny]==1){
p=0;
}
}
if(p==1){
a[x][y]=2;
}else{
a[x][y]=3;
}
return;
}
void jjdfs(int x,int y){
int p=1;
for(int i=0;i<8;i++){
int nx=x+dx[i];
int ny=y+dy[i];
if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&a[nx][ny]!=2){
p=0;
}
}
if(p==1){
ans++;
//cout<<x<<" "<<y<<endl;
}
return;
}
void jjjdfs(int x,int y){
int p=1;
for(int i=0;i<8;i++){
int nx=x+dx[i];
int ny=y+dy[i];
if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&a[nx][ny]==2){
p=0;
}
}
if(p==1){
ans++;
//cout<<x<<" "<<y<<endl;
}
return;
}
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++){
if(a[i][j]!=1){
jdfs(i,j);
}
}
}
//for(int i=1;i<=n;i++){
// for(int j=1;j<=m;j++){
// cout<<a[i][j]<<" ";
// }
// cout<<endl;
//}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(a[i][j]==2){
jjdfs(i,j);
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(a[i][j]==3){
jjjdfs(i,j);
}
}
}
cout<<ans<<endl;
return 0;
}
样例调试结果(去掉代码中所有注释部分)
3 3 3 1 1 3 3 3
1 3 3 1 3 3 3 1
1 3 3 1 3 2 3 3
3 3 3 3 3 3 3 2
2 2 2 2 3 1 3 2
2 2 2 2 3 3 3 2
3 3 3 2 2 2 2 2
3 1 3 2 2 2 2 2
8 5
8 6
8 7
8 8
1 1
1 2
1 3
1 6
1 7
1 8
2 2
2 3
3 2
3 3
8 1
15
本帖禁止无意义发言,请提供有效帮助。