a53

Fill_1221_coada

a53
Apr 20th, 2020
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.95 KB | None | 0 0
  1. /// Solutie - Moca Andrei - 100p - Coada
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4. const int di[] {-1, 0, 1, 0};
  5. const int dj[] { 0, -1, 0, 1};
  6. const int N(1005);
  7. char mat[N][N];
  8. int n, m, iv, jv, cnt;
  9. queue<pair<int, int>> q;
  10. inline void Filleaza(int i, int j) {
  11. for (int dir = 0; dir < 4; ++dir) {
  12. iv = i + di[dir];
  13. jv = j + dj[dir];
  14. if (mat[iv][jv] == '.')
  15. q.emplace(iv, jv);
  16. }
  17. }
  18. int main() {
  19. scanf("%d%d", &n, &m);
  20. for (int i = 0; i <= n; ++i)
  21. gets(mat[i] + 1);
  22. for (int i = 1; i <= n; ++i)
  23. for (int j = 1; j <= m; ++j)
  24. if (mat[i][j] == '.')
  25. q.emplace(i, j);
  26. int i, j;
  27. while (!q.empty()) {
  28. tie(i, j) = q.front();
  29. q.pop();
  30. cnt = 0;
  31. if (mat[i][j] == '.') {
  32. for (int dir = 0; dir < 4; ++dir) {
  33. iv = i + di[dir];
  34. jv = j + dj[dir];
  35. cnt += (mat[iv][jv] == '.');
  36. }
  37. if (cnt == 1) {
  38. if (mat[i-1][j] == '.') {
  39. mat[i-1][j] = '^', mat[i][j] = 'v';
  40. Filleaza(i - 1, j);
  41. }
  42. if (mat[i][j-1] == '.') {
  43. mat[i][j-1] = '<', mat[i][j] = '>';
  44. Filleaza(i, j - 1);
  45. }
  46. if (mat[i+1][j] == '.') {
  47. mat[i][j] = '^', mat[i+1][j] = 'v';
  48. Filleaza(i + 1, j);
  49. }
  50. if (mat[i][j+1] == '.') {
  51. mat[i][j] = '<', mat[i][j+1] = '>';
  52. Filleaza(i, j + 1);
  53. }
  54. }
  55. }
  56. }
  57. for (int i = 1; i <= n; ++i)
  58. for (int j = 1; j <= m; ++j)
  59. if (mat[i][j] == '.') {
  60. printf("%s", "altadata");
  61. return 0;
  62. }
  63. for (int i = 1; i <= n; ++i)
  64. printf("%s\n", mat[i] + 1);
  65. return 0;
  66. }
Add Comment
Please, Sign In to add comment