有关CSP-J第3题的诡异错误与正确
  • 板块学术版
  • 楼主qianghaosen666
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/11/5 18:20
  • 上次更新2024/11/5 18:22:47
查看原帖
有关CSP-J第3题的诡异错误与正确
1337501
qianghaosen666楼主2024/11/5 18:20
#include<bits/stdc++.h>
using namespace std;
int sum,k,n,m;
bool vis[1010][1010];
char a[1010][1010];
void dfs(int x,int y,int d,int cnt){
	if(vis[x][y]==0){
		sum++;
	}
	if(cnt==k){
		return;
	}
	
	if(d==0){
		if(y<m&&a[x][y+1]=='.'){
			vis[x][y]=1;
			dfs(x,y+1,d,cnt+1);
		}else{
			vis[x][y]=1;
			dfs(x,y,1,cnt+1);
		}
	}else if(d==1){
		if(x<n&&a[x+1][y]=='.'){
			vis[x][y]=1;
			dfs(x+1,y,1,cnt+1);
		}else{
			vis[x][y]=1;
			dfs(x,y,2,cnt+1);
		}
	}else if(d==2){
		if(x<n&&a[x][y-1]=='.'){
			vis[x][y]=1;
			dfs(x,y-1,1,cnt+1);
		}else{
			vis[x][y]=1;
			dfs(x,y,3,cnt+1);
		}
	}else{
		if(y>1&&a[x-1][y]=='.'){
			vis[x][y]=1;
			dfs(x-1,y,2,cnt+1);
		}else{
			vis[x][y]=1;
			dfs(x,y,0,cnt+1);
		}
	}
}
int main(){
	freopen("explore.in","r",stdin);
	freopen("explore.out","w",stdout);
	int t,x,y,d;
	cin>>t;
	while(t--){
		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];
			}
		}
		dfs(x,y,d,0);
		cout<<sum<<"\n";
		sum=0;
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				vis[i][j]=0;
			}
		}
	}
	return 0;
}

30分

#include<bits/stdc++.h>
using namespace std;
int sum,k,n,m;
bool vis[1010][1010];
char a[1010][1010];
void dfs(int x,int y,int d,int cnt){
	if(vis[x][y]==0){
		sum++;
	}
	vis[x][y] = 1;
	if(cnt==k){
		return;
	}
	if(d==0){
		if(y<m&&a[x][y+1]=='.'){
			dfs(x,y+1,d,cnt+1);
		}else{
			dfs(x,y,1,cnt+1);
		}
	}else if(d==1){
		if(x<n&&a[x+1][y]=='.'){
			dfs(x+1,y,1,cnt+1);
		}else{
			dfs(x,y,2,cnt+1);
		}
	}else if(d==2){
		if(y>1&&a[x][y-1]=='.'){
			dfs(x,y-1,2,cnt+1);
		}else{
			dfs(x,y,3,cnt+1);
		}
	}else{
		if(x>1&&a[x-1][y]=='.'){
			dfs(x-1,y,3,cnt+1);
		}else{
			dfs(x,y,0,cnt+1);
		}
	}
}
int main(){
	freopen("explore.in","r",stdin);
	freopen("explore.out","w",stdout);
	int t,x,y,d;
	cin>>t;
	while(t--){
		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];
			}
		}
		dfs(x,y,d,0);
		cout<<sum<<"\n";
		sum=0;
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				vis[i][j]=0;
			}
		}
	}
	return 0;
}

100分

2024/11/5 18:20
加载中...