#include <bits/stdc++.h> using namespace std; const int MAXN =1010; char f[MAXN][MAXN]; int f2[MAXN][MAXN]; int dir[4][2] = {{0,1},{1,0},{0,-1},{-1,0}};//方位 int n,m; int x,y; int x2,y2; void bfs() { queue<pair<int,int>> q;//打队列 q.push(make_pair(x,y)); f2[x][y] = 0; while(!q.empty())//bfs模板 { int ux = q.front().first; int uy = q.front().second; if(ux == x2 && uy == y2)return;//到目标点就退出,剩下的点没必要搜了 q.pop(); for(int i=0;i<4;i++) { int dx = ux + dir[i][0]; int dy = uy + dir[i][1]; if(dx<1 || dx>n || dy<1 || dy>m) continue; if(f2[dx][dy] != -1 || f[dx][dy] == '*' )continue; f2[dx][dy] = f2[ux][uy] + 1; q.push(make_pair(dx,dy)); } } } int main() { memset(f2,-1,sizeof(f2));//初始化为-1,为何是-1?因为想少开个数组来判断是否已经访问过 cin >> n >> m;//输入坐标 cin >> x >> y; cin >> x2 >> y2; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { cin >> f[i][j]; } } bfs();//bfs搜最短路径 cout << f2[x2][y2] << endl;//输出目标路径 return 0; }