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 稍等,我的问题。。。