Untitled
unknown
c_cpp
2 years ago
2.3 kB
7
Indexable
#include <iostream> #include <vector> #include <deque> using namespace std; using pii = pair<int, int>; int n, m; int arr[101][101]; bool vis[101][101]; bool cheese[101][101]; int diffx[4] = {0,0,1,-1}; int diffy[4] = {1,-1,0,0}; deque<pii> deq; deque<pii> che; int bfs1(){ che.push_back({0,0}); while(!che.empty()){ pii cur = che.front(); che.pop_front(); int y = cur.first; int x = cur.second; arr[y][x] = 0; vis[y][x] = true; for(int i = 0;i<4;i++){ int ny = y + diffy[i]; int nx = x + diffx[i]; if(0>ny || n<=ny || 0>nx || m <= nx) continue; if(arr[ny][nx] && !vis[ny][nx]){ // cheese exist vis[ny][nx] = true; deq.push_back({ny,nx}); }else{ if(!vis[ny][nx]){ che.push_back({ny,nx}); vis[ny][nx]= true; } } } } return deq.size(); } int T; int bfs2(){ while(!deq.empty()){ for(int i = 0;i<deq.size();i++){ pii cur = deq.front(); deq.pop_front(); // pop int y = cur.first; int x = cur.second; int cnt = 0; for(int i = 0;i<4;i++){ int ny = y + diffy[i]; int nx = x + diffx[i]; if(0>nx || n<= nx || 0>ny || n <= ny) continue; if(arr[ny][nx]==0){ cnt++; } } if(cnt>=2){ che.push_back({y,x}); } } } return che.size(); } void Print(){ for(int i = 0;i<n;i++){ for(int j = 0;j<m;j++){ cout << arr[i][j] << " "; } cout << '\n'; } cout << '\n'; } int main(void){ cin >> n >> m; for(int i =0;i<n;i++){ for(int j = 0;j<m;j++){ cin >> arr[i][j]; } } while(1) // 시작할 곳을 탐색 { bfs1(); if(!deq.empty()){ memset(vis,0,sizeof(vis)); bfs2(); // 녹이기 T++; } else{ break; } Print(); } cout << T <<'\n'; // for(int i = 0;i<deq.size();i++){ // cout << deq[i].first << " " << deq[i].second << '\n'; // } }
Editor is loading...