CSP-J2024 地图探险 题解
·
题目大意
机器人在 n 行 m 列地图上,.空地,x障碍。
方向:0 东 (y+1),1 南 (x+1),2 西 (y‑1),3 北 (x‑1)
一共执行 k 次操作,每一步:
计算向前一步的坐标nx,ny
如果nx,ny在边界内且是空地:就走过去,朝向不变
否则:原地不动,向右转 d=(d+1)%4
求:所有经过过的格子总数,包含起始位置。
核心思路
这是一道纯模拟题,没有复杂算法,核心就是:严格照着题目描述,把机器人每一步行为翻译成代码。
AC代码
#include <bits/stdc++.h>
using namespace std;
const int MAXN=1005;
int a[MAXN][MAXN];
bool vis[MAXN][MAXN];
//偏移量数组
int dx[4]={0, 1, 0, -1};
int dy[4]={1, 0, -1, 0};
int main()
{
int T;
cin>>T;
while(T--)
{
int n,m,k;
cin>>n>>m>>k;
int x,y,d;
cin>>x>>y>>d;
// 初始化vis全部false
memset(vis, 0, sizeof vis);
for(int i=1;i<=n;i++)
{
string s;
cin>>s;
for(int j=1;j<=m;j++)
{
if(s[j-1]=='x') a[i][j]=0;
else a[i][j]=1;
}
}
// 起点标记走过
vis[x][y]=true;
int ans=1;
while(k--)
{
int nx = x + dx[d];
int ny = y + dy[d];
// 判断边界+空地
if(nx>=1 && nx<=n && ny>=1 && ny<=m && a[nx][ny]==1)
{
// 向前走
x=nx;
y=ny;
if(!vis[x][y])
{
vis[x][y]=true;
ans++;
}
}
else
{
// 右转,原地不动
d=(d+1)%4;
}
}
cout<<ans<<'\n';
}
return 0;
}
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)