萌新刚学oi,dfsO290分求助
查看原帖
萌新刚学oi,dfsO290分求助
444195
caramel_qwq楼主2022/10/3 16:36

rt

#include<bits/stdc++.h>
using namespace std;
int n,k,ans;
char a[58][58];
bool vis[58][58];
void dfs(int x,int y,int cnt,char f){
	vis[x][y]=1;
	if(x==n&&y==n){
		if(cnt<=k){
			ans++;
		}
		vis[x][y]=0;
		return ;
	}
	if(x+1<=n){ 
		if(vis[x+1][y]==0){
			if(f=='R'&&cnt<k) dfs(x+1,y,cnt+1,'D');
			if(f!='R') dfs(x+1,y,cnt,'D');
		}
	}
	if(y+1<=n){
		if(vis[x][y+1]==0){
			if(f=='D'&&cnt<k) dfs(x,y+1,cnt+1,'R');
			if(f!='D') dfs(x,y+1,cnt,'R');
		}
	}
	vis[x][y]=0;
	return ;
}
int main(){
	int T;
	scanf("%d",&T);
	while(T--){
		memset(a,'N',sizeof(a));
		memset(vis,0,sizeof(vis));
		scanf("%d%d",&n,&k);
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++){
				char x;
				cin>>x;
				a[i][j]=x;
				if(a[i][j]=='H') vis[i][j]=1;
			}
		}
		ans=0;
		dfs(1,1,0,'N');
		cout<<ans<<"\n";
	}
	return 0;
}
2022/10/3 16:36
加载中...