liye123456 @ 2024-10-27 20:21:29
#include <bits/stdc++.h>
using namespace std;
long long ans=0;
int f[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
bool q[1005][1005]={0},w[1005][1005]={0};
int dfs(int x,int y,int d,int s,int k,int n,int m){
if(s==k){
return s;
}
if(q[x+f[d][0]][y+f[d][1]]==0&&x+f[d][0]<=n&&y+f[d][1]<=m&&x+f[d][0]>=1&&y+f[d][1]>=1){
w[x+f[d][0]][y+f[d][1]]=1;
dfs(x+f[d][0],y+f[d][1],d,s+1,k,n,m);
}
else {
dfs(x,y,(d+1)%4,s+1,k,n,m);
}
}
int main(){
int t;
cin >> t;
while(t--){
int n,m,k,x,y,d;
char c;
cin >> n >> m >> k;
cin >> x >> y >> d;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin >> c;
if(c=='.'){
q[i][j]=0;
}
else {
q[i][j]=1;
}
}
}
w[x][y]=1;
dfs(x,y,d,0,k,n,m);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(w[i][j]==1){
ans++;
w[i][j]=0;
}
}
}
cout << ans << endl;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
q[i][j]=0;
}
}
ans=0;
}
return 0;
}
by maxwr168 @ 2024-10-27 20:35:13
验证码刚好是RE
1. 函数dfs缺少返回值问题
在dfs函数中,当执行```dfs(x+f[d][0],y+f[d][1],d,s + 1,k,n,m);和dfs(x,y,(d + 1)%4,s + 1,k,n,m);```这两个递归调用时,没有对返回值进行处理。应该将这些递归调用的返回值返回,以正确传递结果。
2. 边界检查逻辑优化
当前代码中边界检查的逻辑```x+f[d][0]<=n&&y+f[d][1]<=m&&x+f[d][0]>=1&&y+f[d][1]>=1```有点冗长。可以考虑定义一个辅助函数来进行坐标是否在范围内的检查,这样可以提高代码的可读性和可维护性。
3. 重复初始化问题
在主函数的```while```循环中,每次都对```q```数组进行初始化```(for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){q[i][j]=0;}})```,这是不必要的,因为q数组的值已经在输入时正确设置了。
4. 全局变量使用问题
尽量减少全局变量的使用。```ans```作为全局变量可能会导致代码的可读性变差,可以考虑将其作为函数参数在dfs函数中传递和更新。
5. 输入处理优化
在读取地图信息时,可以直接将```q```数组初始化为 ```0```,当遇到'```X```'(假设障碍物是```X```)时再将对应的```q```值设为 ```1```,这样可以减少一次判断。
6. 内存使用问题
二维数组```q```和```w```如果n和m很大,可能会导致栈溢出。可以考虑使用```vector```来动态分配内存,或者对代码进行优化以减少内存占用。
by maxwr168 @ 2024-10-27 20:36:03
鄙人不太会编辑,将就着吧
by liye123456 @ 2024-10-27 20:39:12
@maxwr168 tk
by maxwr168 @ 2024-10-27 20:41:24
not tk
by WYC0922 @ 2024-10-27 21:46:29
是我的问题吗??? 为什么自己测对的但是交上去就是RE??? 谁能解答一下