写了20分钟,样例还是错的。
#include<bits/stdc++.h>
using namespace std;
int dx[]={0,1,0,-1},dy[]={1,0,-1,0};
int T;
int n,m,k;
char jungle[1500][1500];
bool vis[1500][1500];
int x,y,d;
int ans=0;
void dfs(int x,int y,int d,int rest)
{
if(rest==0) return ;
int heng=x+dx[d],shu=y+dy[d];
if(heng>=1&&heng<=n&&shu>=1&&shu<=m&&jungle[heng][shu]=='.')
{
vis[heng][shu]|=1;
dfs(heng,shu,d,rest-1);
}
else
{
dfs(x,y,(d+1)%4,rest-1);
vis[x][y]|=1;
}
}
int main()
{
scanf("%d",&T);
while(T--)
{
ans=0;
memset(vis,false,sizeof vis);
memset(jungle,0,sizeof jungle);
scanf("%d%d%d",&n,&m,&k);
scanf("%d%d%d",&x,&y,&d);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>jungle[i][j];
dfs(x,y,d,k);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
ans+=vis[i][j];
cout<<ans<<endl;
}
return 0;
}