Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define nl "\n"
- #define fi first
- #define se second
- #define pb push_back
- #define ll long long
- #define ull unsigned ll
- #define RV return void
- // #define inf 2000000000
- #define sz(x) int(x.size())
- #define all(v) v.begin(), v.end()
- #define rall(v) v.rbegin(), v.rend()
- #define Mini(x) *min_element(all(x))
- #define Maxi(x) *max_element(all(x))
- #define fixed(n) fixed << setprecision(n)
- #define ceil(w, m) (((w) / (m)) + ((w) % (m) ? 1 : 0))
- #define cin(v) for (auto&i:v) cin >> i;
- #define cout(v) for (auto&i:v) cout << i << " ";
- #define clr(memo, x) memset(memo, x, sizeof memo)
- #define updmin(a, b) a = min(a, b)
- #define updmax(a, b) a = max(a, b)
- #define vi vector < int >
- #define vl vector < ll >
- #define vc vector < char >
- #define vs vector < string >
- #define v2i vector < vector < int > >
- #define v2l vector < vector < int > >
- #define seti set < int >
- #define setl set < ll >
- #define mapii map < int , int >
- #define mapll map < ll , ll >
- #define mapli map < ll , int >
- #define mapci map < char , int >
- #define mapsi map < string , int >
- #define pll pair < ll , ll >
- #define pii pair < int , int >
- #define range(l,r,x) for(int i=l ; i < r ; i+=x)
- #define FastCode ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
- vector < string > ternary= {"NO\n" , "YES\n"};
- void Zainab(){
- #ifndef ONLINE_JUDGE
- freopen("input.txt", "r", stdin);
- freopen("output.txt", "w", stdout);
- #endif
- }
- /*================================ solution ================================ */
- const int N = 1e3+5;
- char arr[N][N];
- int dx[] = {1 , -1 , 0 , 0};
- int dy[] = {0 , 0 , 1 , -1};
- char C[] = {'D' , 'U' , 'R' , 'L'};
- bool vis[N][N];
- int n , m;
- string path , ans = "-1";
- bool valid (int x , int y ){
- return x >= 0 && x < n && y >= 0 && y < m && arr[x][y] != '#' && !vis[x][y];
- }
- void bfs(int ax , int ay , int bx , int by){
- queue < pair < int , int > > q;
- q.push({ax , ay});
- vis[ax][ay] = 1;
- while(!q.empty()){
- auto p = q.front();
- q.pop();
- int x = p.fi , y = p.se;
- for(int i =0 ; i < 4 ; i++){
- int nx = x + dx[i] , ny = y + dy[i];
- if(valid(nx , ny)){
- vis[nx][ny] = 1;
- path += C[i];
- q.push({nx,ny});
- if(nx == bx && ny == by){
- // cout << x << " " << y << " " << nx << " " << ny << nl;
- // cout << path << nl;
- path.pop_back();
- if(sz(path) < sz(ans) or ans =="-1"){
- ans = path ;
- path="";
- }
- }
- }
- }
- }
- }
- void myCode(){
- cin >> n >> m ;
- int aX , aY , bX , bY;
- for(int i =0 ; i < n ; i++){
- for(int j =0 ; j < m ; j++){
- cin >> arr[i][j];
- if(arr[i][j]=='A')
- aX = i , aY = j;
- else if(arr[i][j]=='B')
- bX = i , bY = j;
- }
- }
- bfs(aX , aY , bX , bY);
- cout << sz(ans) << nl;
- cout << ans ;
- }
- int main(){
- FastCode ;
- Zainab() ;
- int testCase=1;
- // cin >> testCase ;
- for(int i=1 ; i<= testCase ; i++){
- // cout << "Case #" << i << ": ";
- myCode();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement