2025-07-04 17:30:16
发布于:广东
RT,现在为2.56MB
#include <cstdio>
#include <algorithm>
using namespace std;
const int MAXN = 1003;
inline int read() {
int x = 0, f = 1;
char c = getchar();
while (c < '0' || c > '9') {
if (c == '-') f = -1;
c = getchar();
}
while (c >= '0' && c <= '9') {
x = x * 10 + c - '0';
c = getchar();
}
return x * f;
}
const int dx[4] = {0, 1, 0, -1};
const int dy[4] = {1, 0, -1, 0};
void solve() {
int n = read(), m = read(), k = read();
int x = read(), y = read(), d = read();
// 地图数组(同时存储障碍和访问状态)
char grid[MAXN][MAXN];
// 读取地图
for (int i = 1; i <= n; i++) {
scanf("%s", grid[i] + 1);
}
// 标记初始位置并计数
int count = 0;
if (grid[x][y] == '.') {
grid[x][y] = 'v'; // 'v' 表示已访问的空地
count = 1;
}
// 执行k步移动
while (k--) {
int nx = x + dx[d];
int ny = y + dy[d];
// 检查新位置是否有效
if (nx >= 1 && nx <= n && ny >= 1 && ny <= m) {
// 未访问的空地
if (grid[nx][ny] == '.') {
grid[nx][ny] = 'v'; // 标记为已访问
count++;
x = nx; // 移动到新位置
y = ny;
}
// 已访问的空地或空格
else if (grid[nx][ny] == 'v' || grid[nx][ny] == ' ') {
x = nx; // 移动但不计数
y = ny;
}
// 遇到障碍物
else {
d = (d + 1) % 4; // 右转
}
}
// 越界
else {
d = (d + 1) % 4; // 右转
}
}
printf("%d\n", count);
}
int main() {
int T = read();
while (T--) {
solve();
}
return 0;
}
全部评论 1
???什么唐诗发言
2025-07-04 来自 广东
0
有帮助,赞一个