liuruihang2027 @ 2024-12-14 21:51:38
代码
#include <bits/stdc++.h>
using namespace std;
bool vis[1001][1001];
int t,turn1[4]={0,1,0,-1},turn2[4]={1,0,-1,0},x[7],y[7],d[7],n,m,k;//0 right,1 under,2 left,3 on
int main(){
cin>>t;
for (int l=1;l<=t;l++){
int ans=1;
memset (vis,0,sizeof vis);
char a[1001][1001];
cin>>n>>m>>k>>x[l]>>y[l]>>d[l];
for (int i=1;i<=n;i++){
for (int j=1;j<=m;j++){
cin>>a[i][j];
}
}
vis[x[l]][y[l]]=1;
while (k>0){
int xx=x[l]+turn1[d[l]],yy=y[l]+turn2[d[l]];
if (a[xx][yy]=='.'){
if (!vis[xx][yy])
ans++;vis[xx][yy]=1;
x[l]=xx;y[l]=yy;
}else{
d[l]=(d[l]+1)%4;
}
k--;
}
cout<<ans<<endl;
}
return 0;
}
by F1reFly @ 2024-12-14 21:54:58
加一下越界判断试一下,还不行的话就是思路错了,这题好像能走回头路的
by YiskyGame @ 2024-12-14 22:17:51
这题好像不需要vis