想问一下为什么我用循环标记亮的地方不对 代码如下:
#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
int main(){
int n,m,k,i,j,o,p,q,s,ans=0;
cin>>n>>m>>k;
int map[n+5][n+5];
memset(map,0,sizeof(map));
for(i=1;i<=m;i++){
cin>>o>>p;
for (j = o - 2; j <= o + 2;j++)
map[j][p] =1;
for (j = p - 2; j <= p + 2;j++)
map[o][j] = 1;
map[o - 1][p - 1] = map[o + 1][p + 1] = map[o - 1][p + 1] = map[o + 1][p - 1] = 1;
}
for (i = 0; i < k;i++){
cin >> q >> s;
for (int j = q - 2; j <= q + 2;j++){
for (int l = s - 2; l <= s - 2;l++){
map[j][l] = 1;
}
}
}
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
if(map[i][j]==0)ans++;
}
}
cout<<ans;
return 0;
}
题解里面有一个大佬也是用暴力模拟,只是他标记的那部分我用循环来完成,为什么就是不对呢? 这个是那个大佬的代码:
#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>//写这么多头文件确实没必要
using namespace std;
int main(){
int n,m,k,i,j,o,p,q,s,ans=0;
cin>>n>>m>>k;
int map[n+5][n+5];
memset(map,0,sizeof(map));
for(i=1;i<=m;i++){
cin>>o>>p;
map[o+2][p]=1;//一个一个找,一个一个亮,暴力时,一定要有顺序,
map[o][p+2]=1;
map[o-2][p]=1;
map[o][p-2]=1;
map[o+1][p]=1;
map[o+1][p+1]=1;
map[o+1][p-1]=1;
map[o][p+1]=1;
map[o][p]=1;
map[o][p-1]=1;
map[o-1][p]=1;
map[o-1][p+1]=1;
map[o-1][p-1]=1;
}
for(i=1;i<=k;i++){
cin>>q>>s;
map[q-2][s-2]=1;
map[q-2][s-1]=1;
map[q-2][s]=1;
map[q-2][s+1]=1;
map[q-2][s+2]=1;
map[q-1][s-2]=1;
map[q-1][s-1]=1;
map[q-1][s]=1;
map[q-1][s+1]=1;
map[q-1][s+2]=1;
map[q][s-2]=1;
map[q][s-1]=1;
map[q][s]=1;
map[q][s+1]=1;
map[q][s+2]=1;
map[q+1][s-2]=1;
map[q+1][s-1]=1;
map[q+1][s]=1;
map[q+1][s+1]=1;
map[q+1][s+2]=1;
map[q+2][s-2]=1;
map[q+2][s-1]=1;
map[q+2][s]=1;
map[q+2][s+1]=1;
map[q+2][s+2]=1;
}
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
if(map[i][j]==0)ans++;
}
}
cout<<ans;//搞定
return 0;
}