题目
分析题目
题目让我们算出机器人走步后经过了多少个不重复的点
这道题不是搜索!
直接按照题意模拟就行了。
遇到墙就向右转,不是就直行。
特别注意:
- 向右转也是一步!
- 一个格子最多算一遍!
我们可以用一个标记数组 st ,走过的点就打上标记。
判断走道的点有没有打上标记,有就不用++ans,没有就++ans。
if (!st[tx][ty]) {
st[tx][ty] = true;
++ans;
}
AC代码
奉上码风奇特的代码。
#include <iostream>
#include <vector>
using namespace std;
int main() {
int t;
cin >> t;
int dx[] = {0, 1, 0, -1};
int dy[] = {1, 0, -1, 0};
for (int i = 1; i <= t; ++i) {
int n, m, k;
cin >> n >> m >> k;
int x, y, d;
cin >> x >> y >> d;
vector<vector<char>> map(n + 1, vector<char> (m + 1));
vector<vector<bool>> st(n + 1, vector<bool> (m + 1, false));
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= m; ++j) {
cin >> map[i][j];
}
}
int ans = 1;
st[x][y] = true;
for (int i = 1; i <= k; ++i) {
int tx = x + dx[d];
int ty = y + dy[d];
if (1 <= tx && tx <= n && 1 <= ty && ty <= m && map[tx][ty] == '.') {
if (!st[tx][ty]) {
st[tx][ty] = true;
++ans;
}
x = tx;
y = ty;
} else {
d = (d + 1) % 4;
}
}
cout << ans << endl;
}
return 0;
}
标签:洛谷,题目,int,题解,st,++,vector,ans,P11228
From: https://blog.csdn.net/A09Felix/article/details/143576511