fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int n, m;
  5. char grid[1005][1005];
  6. int vis[1005][1005];
  7. int level[1005][1005];
  8. pair<int,int> par[1005][1005];
  9.  
  10. vector<pair<int, int>> b = {{0, 1}, {0, -1}, {-1, 0}, {1, 0}};
  11.  
  12. bool valid(int i, int j) {
  13. return !(i < 0 || i >= n || j < 0 || j >= m || grid[i][j] == '#');
  14. }
  15.  
  16. void bfs(int si, int sj) {
  17. queue<pair<int, int>> q;
  18. q.push({si, sj});
  19. vis[si][sj] = true;
  20. level[si][sj] = 0;
  21.  
  22. while(!q.empty()) {
  23. int pi = q.front().first;
  24. int pj = q.front().second;
  25. q.pop();
  26.  
  27. for (int i = 0; i < 4; i++) {
  28. int ci = pi + b[i].first;
  29. int cj = pj + b[i].second;
  30.  
  31. if(valid(ci, cj) && !vis[ci][cj]) {
  32. q.push({ci, cj});
  33. vis[ci][cj] = true;
  34. level[ci][cj] = level[pi][pj] + 1;
  35. par[ci][cj] = {pi,pj};
  36. }
  37. }
  38. }
  39. }
  40.  
  41.  
  42.  
  43. int main() {
  44. cin >> n >> m;
  45. int si = -1, sj = -1, di = -1, dj = -1;
  46.  
  47. memset(vis, false, sizeof(vis));
  48. memset(level, -1, sizeof(level));
  49. memset(par, -1, sizeof(par));
  50.  
  51.  
  52.  
  53.  
  54. for(int i = 0; i < n; i++) {
  55. for(int j = 0; j < m; j++) {
  56. cin >> grid[i][j];
  57.  
  58. if(grid[i][j] == 'R') {
  59. si = i;
  60. sj = j;
  61. }
  62.  
  63. if(grid[i][j] == 'D') {
  64. di = i;
  65. dj = j;
  66. }
  67. }
  68. }
  69.  
  70.  
  71. bfs(si, sj);
  72.  
  73. pair<int,int> dst = {di, dj};
  74.  
  75. while(dst.first != -1 && dst.second != -1) {
  76.  
  77. if(grid[dst.first][dst.second] != 'R' && grid[dst.first][dst.second] != 'D') {
  78. grid[dst.first][dst.second]='X';
  79. }
  80.  
  81. dst = par[dst.first][dst.second];
  82. }
  83.  
  84. for(int i = 0; i < n; i++) {
  85. for(int j = 0; j < m; j++) {
  86. cout << grid[i][j];
  87. }
  88. cout << endl;
  89. }
  90.  
  91. return 0;
  92. }
  93.  
Success #stdin #stdout 0.01s 19312KB
stdin
Standard input is empty
stdout
Standard output is empty