加上判断,防止数组越界
数组开31就够了
而且可以先判断这个点是不是暴露在边缘或与暴露在边缘的点相邻
如果不是,且这个点为0,输出2
AC代码:
```cpp
#include<iostream>
using namespace std;
int a[501][501];
int n;
int vis[501][501];
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};
void dfs(int x,int y){
a[x][y]=9;
for(int i=0;i<4;i++){
int xx=x+dx[i];
int yy=y+dy[i];
if(xx>=1 && xx<=n && yy>=1 && yy<=n && vis[xx][yy]!=1 && a[xx][yy]==0){
vis[xx][yy]=1;
dfs(xx,yy);
}
}
}
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++){
if(a[i][1]==0){
a[i][1]=9;
dfs(i,1);
}
if(a[i][n]==0){
a[i][n]=9;
dfs(i,n);
}
if(a[1][i]==0){
a[1][i]=9;
dfs(1,i);
}
if(a[n][i]==0){
a[n][i]=9;
dfs(n,i);
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(a[i][j]==9){
cout<<"0 ";
continue;
}
if(a[i][j]==0){
cout<<"2 ";
}else{
cout<<a[i][j]<<' ';
}
}
cout<<endl;
}
return 0;
}
```
by some_ICE_ANK @ 2023-03-28 20:07:08