20分求助
查看原帖
20分求助
1255774
huangzhiyuanhzy楼主2024/11/10 16:34
#include<bits/stdc++.h>
using namespace std;
int t;
int n,m;
char a[1010][1010];
bool vis[1010][1010];
void dfs(int x,int y,int d,int k,int cnt){
	if(k==0){
		cout<<cnt<<endl;
		return ;
	}
	else{
		//cout<<" x:"<<x<<" y:"<<y<<" d:"<<d<<endl;
		if(d==0){
			if(a[x][y+1]=='x'||x<1||(y+1)<1||x>n||(y+1)>m){
				dfs(x,y,(d+1)%4,k-1,cnt);
			}
			else{
	   			if(vis[x][y+1]==0){
					vis[x][y+1]=1;
					dfs(x,y+1,d,k-1,cnt+1);
					vis[x][y+1]=0;
	   			}
	   			else{
	   				dfs(x,y+1,d,k-1,cnt);
				}
			}
			return ;
		}
		else if(d==1){
			if(a[x+1][y]=='x'||(x+1)<1||y<1||(x+1)>n||y>m){
				dfs(x,y,(d+1)%4,k-1,cnt);
			}
			else{
				if(vis[x+1][y]==0){
					vis[x+1][y]=1;
					dfs(x+1,y,d,k-1,cnt+1);
					vis[x+1][y]=0;
				}
				else{
					dfs(x+1,y,d,k-1,cnt);
				}
			}
			return ;
		}
		else if(d==2){
			if(a[x][y-1]=='x'||x<1||(y-1)<1||x>n||(y-1)>m){
				dfs(x,y,(d+1)%4,k-1,cnt);
			}
			else{
				if(vis[x][y-1]==0){
					vis[x][y-1]=1;
					dfs(x,y-1,d,k-1,cnt+1);
					vis[x][y-1]=0;
				}
				else{
					dfs(x,y-1,d,k-1,cnt);
				}
			}
			return ;
		}
		else if(d==3){
			if(a[x-1][y]=='x'||(x-1)<1||y<1||(x-1)>n||y>m){
				dfs(x,y,(d+1)%4,k-1,cnt);
			}
			else{
				if(vis[x-1][y]==0){
					vis[x-1][y]=1;
					dfs(x-1,y,d,k-1,cnt+1);
					vis[x-1][y]=0;
				}
				else{
					dfs(x-1,y,d,k-1,cnt);
				}
			}
			return ;
		}
	}
}
int main(){
    ios::sync_with_stdio(false);
    cin>>t;
	for(int turns=1;turns<=t;turns++){
		int x,y,d,k;
		cin>>n>>m>>k>>x>>y>>d;
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				cin>>a[i][j];
			}
		}
		vis[x][y]=1;
		dfs(x,y,d,k+1,0);
		for(int q=1;q<=n;q++){
			for(int w=1;w<=m;w++){
				vis[q][w]=0;
			}
		}
	}
	return 0;
}
2024/11/10 16:34
加载中...