对了一半(AC 5个,WA 4个,TL 1个)
帮忙把WA的4个改对就行(TL的改对更好)
阿里嘎多
# include <bits/stdc++.h>
using namespace std;
struct stu
{
int x,y,num;
short yn;
};
int n,m,xx[]={0,0,1,-1},yy[]={1,-1,0,0},add_x,add_y;
bool flag[2][1005][1005];
char a[1005][1005];
queue <stu> q;
void bfs()
{
q.push((stu){1,1,0,0});
flag[0][1][1]=1;
while (!q.empty())
{
stu p=q.front();
q.pop();
if (p.x==n&&p.y==m)
{
cout<<p.num;
return ;
}
for (int u=0;u<n;u++)
{
int ux=xx[u]+p.x,uy=yy[u]+p.y;
if (ux>0&&ux<=n&&uy>0&&uy<=m&&a[ux][uy]!='#'&&!flag[p.yn][ux][uy])
{
q.push((stu){ux,uy,p.num+1,p.yn});
flag[p.yn][ux][uy]=1;
}
}
int ux=add_x+p.x,uy=add_y+p.y;
if (ux>0&&ux<=n&&uy>0&&uy<=m&&a[ux][uy]!='#'&&!flag[1][ux][uy]&&!p.yn)
{
q.push((stu){ux,uy,p.num+1,1});
flag[1][ux][uy]=1;
}
}
cout<<-1;
return ;
}
int main()
{
cin>>n>>m>>add_x>>add_y;
for (int u=1;u<=n;u++)
for (int v=1;v<=m;v++)
cin>>a[u][v];
bfs();
return 0;
}