-
Notifications
You must be signed in to change notification settings - Fork 50
/
Copy path10116 - Robot Motion.cpp
49 lines (41 loc) · 1.17 KB
/
10116 - Robot Motion.cpp
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
#include <iostream>
#include <vector>
#include <string>
#include <memory.h>
using namespace std;
int const N = 10;
int n, m, p, i, j, res;
string board[N];
bool vis[N][N];
bool DFS(int &i, int &j, int &res) {
if(vis[i][j]) return true;
vis[i][j] = true;
res++;
if(board[i][j] == 'N' && i - 1 >= 0)
return DFS(--i, j, res);
else if(board[i][j] == 'S' && i + 1 < n)
return DFS(++i, j, res);
else if(board[i][j] == 'E' && j + 1 < m)
return DFS(i, ++j, res);
else if(board[i][j] == 'W' && j - 1 >= 0)
return DFS(i, --j, res);
else
return false;
}
int main() {
while(cin >> n >> m >> p && n && m && p) {
for(int i = 0; i < n; i++) cin >> board[i];
memset(vis, false, sizeof vis);
i = 0;
j = p - 1;
res = 0;
if(DFS(i, j, res)) {
memset(vis, false, sizeof vis);
p = 0;
DFS(i, j, p);
cout << res - p << " step(s) before a loop of " << p << " step(s)" << endl;
} else
cout << res << " step(s) to exit" << endl;
}
return 0;
}