Advertisement
a53

Fill_1221_recursivitate

a53
Apr 20th, 2020
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.73 KB | None | 0 0
  1. /// Solutie - Moca Andrei - 100p - Recursivitate
  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], *nl;
  8. int n, m, iv, jv, cnt;
  9. inline void FilleazaVecini(int i, int j);
  10. inline void Fill(int i, int j);
  11. int main() {
  12. scanf("%d%d", &n, &m);
  13. for (int i = 0; i <= n; ++i)
  14. gets(mat[i] + 1);
  15. for (int i = 1; i <= n; ++i)
  16. for (int j = 1; j <= m; ++j)
  17. if (mat[i][j] == '.')
  18. Fill(i, j);
  19. for (int i = 1; i <= n; ++i)
  20. for (int j = 1; j <= m; ++j)
  21. if (mat[i][j] == '.') {
  22. printf("%s", "altadata");
  23. return 0;
  24. }
  25. for (int i = 1; i <= n; ++i)
  26. printf("%s\n", mat[i] + 1);
  27. return 0;
  28. }
  29. void FilleazaVecini(int i, int j) {
  30. for (int dir = 0; dir < 4; ++dir) {
  31. iv = i + di[dir];
  32. jv = j + dj[dir];
  33. if (mat[iv][jv] == '.')
  34. Fill(iv, jv);
  35. }
  36. }
  37. void Fill(int i, int j) {
  38. cnt = 0;
  39. for (int dir = 0; dir < 4; ++dir) {
  40. iv = i + di[dir];
  41. jv = j + dj[dir];
  42. cnt += (mat[iv][jv] == '.');
  43. }
  44. if (cnt == 1) {
  45. if (mat[i-1][j] == '.') {
  46. mat[i-1][j] = '^', mat[i][j] = 'v';
  47. FilleazaVecini(i - 1, j);
  48. }
  49. if (mat[i][j-1] == '.') {
  50. mat[i][j-1] = '<', mat[i][j] = '>';
  51. FilleazaVecini(i, j - 1);
  52. }
  53. if (mat[i+1][j] == '.') {
  54. mat[i][j] = '^', mat[i+1][j] = 'v';
  55. FilleazaVecini(i + 1, j);
  56. }
  57. if (mat[i][j+1] == '.') {
  58. mat[i][j] = '<', mat[i][j+1] = '>';
  59. FilleazaVecini(i, j + 1);
  60. }
  61. }
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement