rt,如果不清楚可以点开链接查看

一直 RE 40 分,我不理解
My 40pts code:
#include<bits/stdc++.h>
#define int long long
using namespace std;
struct Pos{
int x,y;
};
queue<Pos> q;
int n,m,x,y,tx,ty,dis[1010][1010],x_,y_;
const int dx[]={1,-1,0,0};
const int dy[]={0,0,1,-1};
bool mp[1010][1010];
bool vis[1010][1010];
int bfs(int sx,int sy)
{
memset(dis,1e9,sizeof(dis));
q.push((Pos){sx,sy});
vis[sx][sy]=1;
while(!q.empty())
{
x=q.front().x,y=q.front().y;
q.pop();
if(x==x_&&y==y_) return dis[x][y];
for(int i=0;i<4;i++)
{
for(int j=1;;j<<=1)
{
bool flag=1;
tx=x+dx[i]*j,ty=y+dy[i]*j;
if(tx<=0||tx>n||ty<=0||ty>m) break;
if(i%2) //后退的情况
{
for(int gx=x;gx>=tx;gx--)
{
for(int gy=y;gy>=ty;gy--)
{
if(mp[gx][gy])
{
flag=0;
break;
}
}
}
}
else
{
for(int gx=x;gx<=tx;gx++)
{
for(int gy=y;gy<=ty;gy++)
{
if(mp[gx][gy])
{
flag=0;
break;
}
}
}
}
if(!flag) break;
dis[tx][ty]=min((long long)(dis[tx][ty]?dis[tx][ty]:1e9),dis[x][y]+1);
vis[tx][ty]=1;
q.push((Pos){tx,ty});
}
}
}
return -1;
}
signed main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
char s;
cin>>s;
if(s=='#') x_=i,y_=j;
else mp[i][j]=(s=='X'?1:0);
}
// for(int i=0;i<n;i++)
// {
// for(int j=0;j<m;j++) cout<<mp[i][j];
// cout<<endl;
// }
cout<<bfs(1,1);
return 0;
}
求 debug