社区讨论

dfs递归RE求助

P11228[CSP-J 2024] 地图探险参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@m3b95j3j
此快照首次捕获于
2024/11/10 15:07
去年
此快照最后确认于
2025/11/04 14:58
4 个月前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;
char a[1145][1145];
int b[1145][1145];
int dx[5] = {0,1,0,-1};
int dy[5] = {1,0,-1,0};
int dfs(int idx,int x,int y,int d,int n,int m,int k,int cnt,int x0,int y0){
	if(idx > k) return cnt;
	int newx,newy;
	newx = x + dx[d];
	newy = y + dy[d];
	if(newx == x0 and newy == y0) return cnt;
	if(newx < 1 || newx > n || newy < 1 || newy > m || a[newx][newy] == 'x'){
		dfs(idx+1,x,y,(d+1)%4,n,m,k,cnt,x0,y0);
//		cout << (d+1)%4 << endl;
	}
	else{
		if(b[newx][newy]==0) cnt++;
//		cout << cnt << endl;
		b[newx][newy] = 1;
		dfs(idx+1,newx,newy,d,n,m,k,cnt,x0,y0);
//		cout << newx <<" "<< newy << endl;
	}
}
int main(){
//	freopen("explore2.in","r",stdin);
//	freopen("explore.out","w",stdout);
	int T;
	cin >> T;
	int x0,y1,d0,n,m,k,cnt=0;
	for(int i = 1;i <= T;i++){
		int n,m,k,x0,y0,d0;
		cin >> n >> m >> k >> x0 >> y1 >> d0;
		for(int j = 1;j <= n;j++){
			string tmps;
			cin >> tmps;
			for(int x = 1;x <= m;x++){
				a[j][x] = tmps[x-1];
			}
		}
		b[1][1] = 1;
		cout << dfs(0,x0,y0,d0,n,m,k,1,x0,y0) << endl;
		for(int j = 1;j <= n;j++){
			for(int x = 1;x <= m;x++){
				b[j][x] = 0;
			}
		}
	}
	return 0;
}
写得有点抽象,帮忙查查

回复

1 条回复,欢迎继续交流。

正在加载回复...