50分
查看原帖
50分
1467028
wanglovezl楼主2024/11/20 16:43
#include<bits/stdc++.h>
using namespace std;
int Map[1005][1005];
int kmap[1005][1005];
int T;
char kmp;
int n,m,k;
int x,y,d;
int ans;
bool check(int x,int y){
	if(x>n||x<1||y>m||y<1) return false;
	else if(Map[x][y]==1) return false;
	return true;
}
void dfs(int x,int y,int d,int cnt,int cna){
	if(cna==k) return;
	int nx,ny;
	if(d==0){
		nx=x,ny=y+1;
		if(check(nx,ny)==true){
			if(kmap[nx][ny]==0) ans++;
			kmap[nx][ny]=1;
			dfs(nx,ny,d,0,++cna);
		}
		else if(check(nx,ny)==false){
			d=(d+1)%4;
			dfs(x,y,d,++cnt,++cna);
		}
	}
	else if(d==1){
		nx=x+1,ny=y;
		if(check(nx,ny)==true){
			if(kmap[nx][ny]==0) ans++;
			kmap[nx][ny]=1;
			dfs(nx,ny,d,0,++cna);
		}
		else if(check(nx,ny)==false){
			d=(d+1)%4;
			dfs(x,y,d,++cnt,++cna);
		}
	}
	else if(d==2){ 
		nx=x,ny=y-1;
		if(check(nx,ny)==true){
			if(kmap[nx][ny]==0) ans++;
			kmap[nx][ny]=1;
			dfs(nx,ny,d,0,++cna);
		}
		else if(check(nx,ny)==false){
			d=(d+1)%4;
			dfs(x,y,d,++cnt,++cna);
		}
	}
	else if(d==3){
		nx=x-1,ny=y;
		if(check(nx,ny)==true){
			if(kmap[nx][ny]==0) ans++;
			kmap[nx][ny]=1;
			dfs(nx,ny,d,0,++cna);
		}
		else if(check(nx,ny)==false){
			d=(d+1)%4;
			dfs(x,y,d,++cnt,++cna);
		}
	}
	return;
}
int main(){
	scanf("%d",&T);
	while(T--){
		ans=1;
		memset(Map,0,sizeof(Map));
		memset(kmap,0,sizeof(kmap));
		cin>>n>>m>>k;
		cin>>x>>y>>d;
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				cin>>kmp;
				if(kmp=='.'){
					Map[i][j]=0;
				}
				else if(kmp=='x'){
					Map[i][j]=1;
				}
			}
		}
		dfs(x,y,d,0,0);
		printf("%d\n",ans);
	}
	return 0;
}
2024/11/20 16:43
加载中...