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 谢谢,给个关注作为谢礼哈