fork download
  1. #include <iostream>
  2. #include<bits/stdc++.h>
  3. using namespace std;
  4. int n,m;
  5. priority_queue< string, vector<string>, greater<string>> ans;
  6.  
  7. bool valid(int a, int b)
  8. {
  9. if(a<0||b<0||a>=n||b>=m)return false;
  10. return true;
  11.  
  12. }
  13. void dfs(vector<vector<char>>arr, int i,int j, string sol)
  14. {
  15.  
  16.  
  17. if(arr[i][j]=='B')
  18. {
  19.  
  20. ans.push(sol); return;
  21. }
  22.  
  23. else if(arr[i][j]!='.')return;
  24.  
  25. arr[i][j]='#';
  26.  
  27. vector<pair<pair<int,int>,char>> dir
  28. {{{-1,0},'U'}, {{0,1},'R'}, {{0,-1},'L'}, {{1,0},'D'}};
  29.  
  30. for(auto x: dir)
  31. {
  32. int a=i+x.first.first;
  33. int b=j+x.first.second;
  34. char d=x.second;
  35.  
  36. if(valid(a,b))
  37. { sol+=d;
  38.  
  39. dfs(arr,a,b,sol);
  40.  
  41. sol.pop_back();
  42. }
  43. }
  44.  
  45. arr[i][j]='.';
  46. return;
  47. }
  48.  
  49. int main() {
  50.  
  51. cin>>n>>m;
  52. int a,b;
  53.  
  54. vector<vector<char>>arr(n,vector<char>(m));
  55.  
  56. for(int i=0;i<n;i++)
  57. {
  58. for(int j=0;j<m;j++)
  59. {
  60. cin>>arr[i][j];
  61. if(arr[i][j]=='A')a=i,b=j;
  62. }
  63. }
  64.  
  65.  
  66. arr[a][b]='.';
  67.  
  68. string sol;
  69. dfs(arr,a,b,sol);
  70.  
  71. if(ans.size())
  72. { cout<<"YES"<<endl<<ans.top().size()<<endl<<ans.top();}
  73.  
  74. cout<<"NO";
  75.  
  76.  
  77.  
  78.  
  79.  
  80. }
Success #stdin #stdout 0.01s 5280KB
stdin
5 8
########
#.A#...#
#.##.#B#
#......#
########
stdout
YES
9
LDDRRRRRUNO