求大佬调教

P11228 [CSP-J 2024] 地图探险

Yezi_damn @ 2024-11-08 21:06:48

代码在下面,看了半天没有查出啥问题;

样例没有过,一直都是只停留在起点

个人觉得可以从 24 行的 while 循环那里开始找问题

麻烦大佬调教一下,球球了!

#include<bits/stdc++.h>
using namespace std;
bool vis[1010][1010],mp[1010][1010];
int dx[]={0,1,0,-1},dy[]={1,0,-1,0},ans,n,m,k,x,y,d,v;
char s;
int main()
{
    int T;
    cin>>T;
    while(T--)
    {
        ans=0;
        memset(vis,0,sizeof vis);
        cin>>n>>m>>k>>x>>y>>d;
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=m;j++)
            {
                cin>>s;
                mp[i][j]=(s=='.'?1:0);
            }
        }
        vis[x][y]=1; //标记起点!!! 
        while(k--) //k次尝试 
        {
            int xx=x+dx[d],yy=y+dy[d];
            if(xx>0&&xx<=n&&yy>0&&yy<=m&&mp[xx][yy]&&vis[xx][yy]) x=xx,y=xx;
            else d=(d+1)%4; //换方向试
            vis[x][y]=1;
        }
        for(int i=1;i<=n;i++) 
        {
            cout<<"  => ";
            for(int j=1;j<=m;j++) 
//              ans+=vis[i][j]; //total 
                cout<<vis[i][j]<<' ';
            cout<<endl;
        }

        cout/*<<" ans=>"*/<<ans<<endl;
    }
}

by pig1121 @ 2024-11-08 21:11:42

@Yezi_damn if(xx>0&&xx<=n&&yy>0&&yy<=m&&mp[xx][yy]&&vis[xx][yy]) x=xx,y=xx;

???

vis[xx][yy]


by Yezi_damn @ 2024-11-08 21:12:34

@pig1121 前面,边界判断+障碍判断


by Yezi_damn @ 2024-11-08 21:12:48

@pig1121 就是说走之后不能走到障碍上


by pig1121 @ 2024-11-08 21:14:24

@Yezi_damn 不是哥们你这 vis 不是标记走过的点吗?


by Yezi_damn @ 2024-11-08 21:14:42

@pig1121 对呀?


by Yezi_damn @ 2024-11-08 21:15:02

@pig1121 走过的不能再走了啊。。。


by pig1121 @ 2024-11-08 21:15:22

@Yezi_damn 你这样写相当于只能走在走过的点上,那不是一直在起点吗?


by thluogu @ 2024-11-08 21:15:23

27行

if(xx>0&&xx<=n&&yy>0&&yy<=m&&mp[xx][yy]&&vis[xx][yy]) x=xx,y=xx;

=>

if(xx>0&&xx<=n&&yy>0&&yy<=m&&mp[xx][yy]&&!vis[xx][yy]) x=xx,y=xx;

\

vis[xx][yy] 应该是0才能走过去吧,你把vis设1表示锁了,那这里要 !vis[xx][yy] 才能正常走


by thluogu @ 2024-11-08 21:15:37

@Yezi_damn


by Yezi_damn @ 2024-11-08 21:16:02

@pig1121 @thluogu 稍等,我的问题。。。


| 下一页