难度:3
有朝向问题的模拟题怎么写,以及题目里面的判断不会写,就写了这个骗分的反正也能过。
#include <bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define all(x) (x).begin(), (x).end()
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef pair<int, int> pa;
int dir[4][2] = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}};
string s[10];
void solve(int& x, int& y, int& d) {
int xx = x + dir[d][0];
int yy = y + dir[d][1];
if (xx < 0 || yy < 0 || xx >= 10 || yy >= 10) {
d = (d + 1) % 4;
} else if (s[xx][yy] == '*') {
d = (d + 1) % 4;
} else {
x = xx;
y = yy;
}
}
int main() {
int sx, sy;
int ex, ey;
for (int i = 0; i < 10; i++) {
cin >> s[i];
for (int j = 0; j < (int) s[i].size(); j++) {
if (s[i][j] == 'F') {
sx = i;
sy = j;
s[i][j] = '.';
} else if (s[i][j] == 'C') {
ex = i;
ey = j;
s[i][j] = '.';
}
}
}
int dir1 = 0;
int dir2 = 0;
int ans = 0;
while (1) {
if (sx == ex && sy == ey) {
cout << ans;
break;
} else if (ans > 10000) {
cout << 0;
break;
}
solve(sx, sy, dir1);
solve(ex, ey, dir2);
ans++;
}
return 0;
}