/* Zadatak: Složenost: Primjeri: Datum: Autor: Kristijan Burnik, udruga informatičara Božo Težak Gmail: kristijanburnik */ #include #include #include #include #include #include #include #include #include using namespace std; int n, m; char mat[100][100]; bool done[100][100]; typedef pair pos; #define X first #define Y second #define mp make_pair int N,M; bool inside( pos a ) { return (a.X >=0 && a.X < N) && (a.Y >=0 && a.Y < M); } bool canmove( pos a ) { return inside(a) && (mat[a.X][a.Y] == '*'); } // uzorak kretanja pos DELTA[4] = {mp(-1,0),mp(1,0),mp(0,-1),mp(0,1)}; vector < pos > delta(DELTA,DELTA+4); const int DS = delta.size(); void wrap(pos current) { queue q; q.push(current); done[current.X][current.Y] = true; int count = 0; while (!q.empty()) { current = q.front(); q.pop(); for (int i = 0 ; i < DS; i++) { pos next = mp(current.X+delta[i].X,current.Y+delta[i].Y); if (inside(next) && !done[next.X][next.Y]) { if (canmove(next)) { q.push(next); done[next.X][next.Y] = true; } else { mat[next.X][next.Y] = '#'; } } } } } int main() { cin >> N >> M; for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { cin >> mat[i][j]; } } for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { char c = mat[i][j]; if (!done[i][j] && c == '*') { wrap(pos(i,j)); } } } for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { cout << mat[i][j]; } cout << endl; } return 0; }