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