-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathLabyrinth.cpp
More file actions
91 lines (74 loc) · 2.49 KB
/
Labyrinth.cpp
File metadata and controls
91 lines (74 loc) · 2.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include <bits/stdc++.h>
using namespace std;
int i_B,j_B;
int n,m;
char ans[1001][1001];
int please = 1;
void BFS(int i_A,int j_A,vector<vector<char>>&array,vector<vector<bool>>&check){
queue<pair<int,int>>current;
current.push(make_pair(i_A,j_A));
while(current.size()){
int curr_i = current.front().first;
int curr_j = current.front().second;
current.pop();
// cout << curr_i << " " << curr_j << endl;
if(curr_i == i_B && curr_j == j_B){return;}
if((curr_i + 1 < n && array[curr_i+1][curr_j] != '#') && !check[curr_i + 1][curr_j]){
ans[curr_i+1][curr_j] = 'D';
current.push(make_pair(curr_i+1,curr_j));
check[curr_i+1][curr_j] =true;
}
if((curr_i - 1 >= 0 && array[curr_i-1][curr_j] != '#' )&& !check[curr_i-1][curr_j]){
ans[curr_i-1][curr_j] = 'U';
current.push(make_pair(curr_i-1,curr_j));
check[curr_i-1][curr_j] =true;
}
if((curr_j + 1 < m && array[curr_i][curr_j+1] != '#' )&& !check[curr_i][curr_j+1]){
ans[curr_i][curr_j+1] = 'R';
current.push(make_pair(curr_i,curr_j+1));
check[curr_i][curr_j+1] =true;
}
if((curr_j - 1 >= 0 && array[curr_i][curr_j-1] != '#' )&& !check[curr_i][curr_j-1]){
ans[curr_i][curr_j-1] = 'L';
current.push(make_pair(curr_i,curr_j-1));
check[curr_i][curr_j-1] =true;
}
}
please = 0;
}
int main(){
cin >> n >> m;
vector<vector<char>>maze(n);
vector<vector<bool>>check(n);
int i_A,j_A;
for(int i = 0 ; i < n ; i ++){
for(int j = 0 ; j < m ; j ++){
char x;
cin >>x;
if(x == 'A'){
i_A = i;
j_A = j;
}else if(x == 'B'){
i_B = i;
j_B = j;
}
maze[i].push_back(x);
check[i].push_back(false);
}
}
BFS(i_A,j_A,maze,check);
if(!please){cout << "NO";return 0;}
cout << "YES" << endl;
vector<char>final_ans;
while(!(i_B == i_A && j_B == j_A)){
final_ans.push_back(ans[i_B][j_B]);
if(ans[i_B][j_B] == 'U'){i_B++;}
else if(ans[i_B][j_B] == 'D'){i_B--;}
else if(ans[i_B][j_B] == 'L'){j_B++;}
else if(ans[i_B][j_B] == 'R'){j_B--;}
}
cout << final_ans.size() << endl;
for(auto a = final_ans.rbegin(); a != final_ans.rend();a++)cout << *a;
cout << endl;
return 0;
}