@[Cyc曹](/user/288506) 这样试试
```cpp
#include <iostream>
#include <queue>
using namespace std;
int n,x1,x2,y1,y2;
char map[1005][1005];
int mx[4]={1,-1,0,0};
int my[4]={0,0,1,-1};
bool visit[1005][1005];
struct road{
int x,y,step;
};
void bfs(int x1,int y1){
queue <road> que;
road first;
first.x=x1;
first.y=y1;
first.step=0;
visit[x1][y1]=1;
que.push(first);
while(!que.empty()){
road f=que.front();
que.pop();
if(f.x==x2 && f.y==y2){
cout<<f.step<<endl;
return;
}
for(int i = 0;i<4;i++){
int tx=f.x+mx[i];
int ty=f.y+my[i];
if(!visit[tx][ty] && map[tx][ty]=='0'){
road n;
n.x=tx;
n.y=ty;
n.step=f.step+1;
visit[tx][ty] = 1; // 修改
que.push(n);
}
}
}
}
int main(){
cin>>n;
for(int i = 1;i<=n;i++){
for(int j = 1;j<=n;j++){
cin>>map[i][j];
}
}
cin>>x1>>y1>>x2>>y2;
bfs(x1,y1);
return 0;
}
```
by zltqwq @ 2021-05-05 16:29:54
不用 $short$ 能行吗? $short$ 不大好用。
空间复杂度上没啥问题吧
by reailikezhu @ 2021-05-05 16:30:44
刚刚自己也发现了 谢谢大佬
by OutsideR_ @ 2021-05-05 16:30:50
@[zltzlt](/user/275273) 咱俩想法是相同的
by reailikezhu @ 2021-05-05 16:31:14
@[reailikezhu](/user/424052)
没错 主要是没有标记
```
visit[tx][ty]
```
by OutsideR_ @ 2021-05-05 16:31:25
@[Cyc曹](/user/288506) 是。
by reailikezhu @ 2021-05-05 16:32:24