样例的循环第一个过了,第二个没过。
12345那里第一次运行了,第二次没运行。
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const short dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};
char c[1005][1005];
bool bb[1005][1005];
int T,m,n,k,x,y,d,ans,x1,y1;
int main(){
scanf("%d",&T);
while(T--){
ans=0;
memset(bb,0,sizeof(bb));
cin>>n>>m>>k;//12345
// scanf("%d%d%d",&n,&m,&k);
printf("n:%d %d %d\n",n,m,k);
cin>>x>>y>>d;
// scanf("%d%d%d",&x,&y,&d);
printf("x:%d %d %d\n",x,y,d);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++)
scanf("%c",&c[i][j]);
}
//printf("okk");
bb[x][y]=1;
while(k-->0){
x1=x+dx[d],y1=y+dy[d];
if(1<=x1&&x1<=n&&1<=y1&&y1<=m&&c[x1][y1]=='.'){
x=x1,y=y1;
// printf("visited %d %d ",x,y);
}
else{
d=(d+1)%4;
// printf("%d %d is not ok ",x1,y1);
// printf("now is at %d %d,d=%d",x,y,d);
}
bb[x][y]=1;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++) {
if(bb[i][j]) ans++;
}
}
printf("%d\n",ans);
}
return 0;
}