RE求助

P11228 [CSP-J 2024] 地图探险

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??? 谁能解答一下


|