Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /// Solutie - Moca Andrei - 100p - Coada
- #include <bits/stdc++.h>
- using namespace std;
- const int di[] {-1, 0, 1, 0};
- const int dj[] { 0, -1, 0, 1};
- const int N(1005);
- char mat[N][N];
- int n, m, iv, jv, cnt;
- queue<pair<int, int>> q;
- inline void Filleaza(int i, int j) {
- for (int dir = 0; dir < 4; ++dir) {
- iv = i + di[dir];
- jv = j + dj[dir];
- if (mat[iv][jv] == '.')
- q.emplace(iv, jv);
- }
- }
- int main() {
- scanf("%d%d", &n, &m);
- for (int i = 0; i <= n; ++i)
- gets(mat[i] + 1);
- for (int i = 1; i <= n; ++i)
- for (int j = 1; j <= m; ++j)
- if (mat[i][j] == '.')
- q.emplace(i, j);
- int i, j;
- while (!q.empty()) {
- tie(i, j) = q.front();
- q.pop();
- cnt = 0;
- if (mat[i][j] == '.') {
- for (int dir = 0; dir < 4; ++dir) {
- iv = i + di[dir];
- jv = j + dj[dir];
- cnt += (mat[iv][jv] == '.');
- }
- if (cnt == 1) {
- if (mat[i-1][j] == '.') {
- mat[i-1][j] = '^', mat[i][j] = 'v';
- Filleaza(i - 1, j);
- }
- if (mat[i][j-1] == '.') {
- mat[i][j-1] = '<', mat[i][j] = '>';
- Filleaza(i, j - 1);
- }
- if (mat[i+1][j] == '.') {
- mat[i][j] = '^', mat[i+1][j] = 'v';
- Filleaza(i + 1, j);
- }
- if (mat[i][j+1] == '.') {
- mat[i][j] = '<', mat[i][j+1] = '>';
- Filleaza(i, j + 1);
- }
- }
- }
- }
- for (int i = 1; i <= n; ++i)
- for (int j = 1; j <= m; ++j)
- if (mat[i][j] == '.') {
- printf("%s", "altadata");
- return 0;
- }
- for (int i = 1; i <= n; ++i)
- printf("%s\n", mat[i] + 1);
- return 0;
- }
Add Comment
Please, Sign In to add comment