1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
| #include <bits/stdc++.h>
using namespace std;
const int N = 100;
int n,m; int g[N][N],st[N][N]; int ax[4] = {1,-1,0,0}; int ay[4] = {0,0,1,-1};
void dfs(int i,int j){ st[i][j] = 1; for(int k=0;k<4;k++){ int x = i + ax[k]; int y = j + ay[k]; if(x >=0 && x< n && y >=0 && y < m && !st[x][y] && g[x][y]){ st[x][y] = 1; dfs(x,y); } } }
void dfs2(int i,int j){ st[i][j] = 1; g[i][j] = 0; for(int k=0;k<4;k++){ int x = i + ax[k]; int y = j + ay[k]; if(x >=0 && x< n && y >=0 && y < m && !st[x][y] && g[x][y]){ st[x][y] = 1; g[x][y] = 0; dfs2(x,y); } } }
int main(){ cin >> n >> m; for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ cin >> g[i][j]; } } memset(st,0,sizeof(st)); for(int i=0;i<n;i++){ if(g[i][0]) dfs(i,0); if(g[i][m-1]) dfs(i,m-1); } for(int j=0;j<m;j++){ if(g[0][j]) dfs(0,j); if(g[n-1][j]) dfs(n-1,j); } for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ if(!st[i][j] && g[i][j]){ dfs2(i,j); } } } for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ cout << g[i][j] << " "; } if(i == n-1) break; cout << "\n"; } return 0; }
|