求助#2#4

P1162 填涂颜色

加上判断,防止数组越界 数组开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


|