40分代码!

P11228 [CSP-J 2024] 地图探险

xx04 @ 2024-12-22 11:23:05

大概知道问题点在哪儿,就是题目中的第二个样例感觉走的很奇怪,代码测试出来从4,2开始就飞了,走到别的方向了,

    for(int i=1;i<=t;i++){
        int n,m,k;
        int x,y,d;
        cin>>n>>m>>k>>x>>y>>d;
        int c=1;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                cin>>a[i][j];
            }
        }
        while(k>0){     
            if(d==0){
                k--;
                if(k<0){
                    break;
                }
                if(x>=1&&x<=n&&y>=1&&y+1<=m&&a[x][y+1]=='.'){                   
                    c++;
                    y++;
                    a[x][y]='x';
                }
                else{
                    d=(d+1)%4;
                }
            } 
            if(d==1){
                k--;
                if(k<0){
                    break;
                }
                if(x>=1&&x+1<=n&&y>=1&&y<=m&&a[x+1][y]=='.'){                   
                    c++;
                    x++;
                    a[x][y]='x';
                }
                else{
                    d=(d+1)%4;
                }
            }
            if(d==2){
                k--;
                if(k<0){
                    break;
                }
                if(x>=1&&x<=n&&y-1>=1&&y<=m&&a[x][y-1]=='.'){
                    c++;
                    y--;
                    a[x][y]='x';
                }
                else{
                    d=(d+1)%4;
                }
            }
            if(d==3){
                k--;
                if(k<0){
                    break;
                }
                if(x-1>=1&&x<=n&&y>=1&&y<=m&&a[x-1][y]=='.'){
                    c++; 
                    x--;    
                    a[x][y]='x';                
                }
                else{
                    d=(d+1)%4;
                }
            }
        }
        cout<<c<<endl;      
    }

by cc_tcpt @ 2025-01-08 17:14:07

我没有调试,但是我看着的错误,是题目没有说走过之后就不能走,你程序到了一个能到的点后,就给他标记起来了。如果回答有错非常抱歉


|