50pts
查看原帖
50pts
1211335
_liujunming_楼主2024/10/31 19:57
#include<bits/stdc++.h>
using namespace std;
int t;
const int N=1005;
bool come[N][N];
char s[N][N];
int cx[4]={0,1,0,-1},cy[4]={1,0,-1,0};
int n,m,k,sx,sy,sd;
void dfs(int x,int y,int now,int d,int ld)
{
	if(come[x][y]&&ld==d||now>k)return ;
	else come[x][y]=true;
	if(now>k)return ;
	if(x+cx[d]>0&&x+cx[d]<=n&&cy[d]+y>0&&cy[d]+y<=m&&s[cx[d]+x][cy[d]+y]=='.')
		dfs(cx[d]+x,cy[d]+y,now+1,d,d);
	else
		dfs(x,y,now+1,(d+1)%4,d);
	return ;
}
void run()
{
	int ans=0;
	memset(come,false,sizeof(come));
	scanf("%d%d%d%d%d%d",&n,&m,&k,&sx,&sy,&sd);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			cin>>s[i][j];
	dfs(sx,sy,0,sd,-1);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			ans+=(come[i][j]);
	printf("%d\n",ans);
}
int main()
{
	scanf("%d",&t);
	for(int i=1;i<=t;i++)run();
	return 0;
# }
2024/10/31 19:57
加载中...