求大佬调教

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 Yezi_damn @ 2024-11-08 21:17:31

原 out:

2
1 5 4
1 1 2
....x
  => 1 0 0 0 0
0
5 5 20
1 1 0
.....
.xxx.
.x.x.
..xx.
x....
  => 1 0 0 0 0
  => 0 0 0 0 0
  => 0 0 0 0 0
  => 0 0 0 0 0
  => 0 0 0 0 0
0

改之后的 Code 和 out:

#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;
    }
}

out:

2
1 5 4
1 1 2
....x
  => 1 0 0 0 0
0
5 5 20
1 1 0
.....
.xxx.
.x.x.
..xx.
x....
  => 1 0 0 0 0
  => 0 0 0 0 0
  => 0 0 0 0 0
  => 0 0 0 0 0
  => 0 0 0 0 0
0

by Yezi_damn @ 2024-11-08 21:17:45

@pig1121 @thluogu


by thluogu @ 2024-11-08 21:21:35

@Yezi_damn 你的ans都没加过啊。。ans可以初值设1表示初始的砖,然后每次走到一个没vis过的点就+1


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

而且这题并没有规定走过的不能再走,所以刚刚的if的条件里应该直接去掉vis这一项


by pig1121 @ 2024-11-08 21:23:12

@Yezi_damn 走过的应该直接 break,你这样可能会转向之后再走另一方向,而且 y=xx 是什么鬼?


by Yezi_damn @ 2024-11-08 21:23:28

@thluogu 不是,我的 ans 是因为调试过程就把它注释掉了。。。

原本在第 35 行有加的,我只是先把它临时注释掉换成输出 vis 数组罢了。。。


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

@pig1121 说错了,走过的没有影响


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

@pig1121 啊这个我真的没发现。。。

稍等一下


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

@thluogu @pig1121 谢谢,给个关注作为谢礼哈


上一页 |