标准的BFS板子 #include<iostream> #include<queue> using namespace std; char arr[1001][1001]; bool visit[1001][1001]; int pos[4][2] = { {0,1},{0,-1},{1,0},{-1,0} }; struct Node { int x; int y; int length; }; int BFS(int c_x, int c_y, int x, int y,int n,int m) { for (int i = 1; i <= n; i++) { for (int j = 0; j <= m; j++) { visit[i][j] = false; } } queue<Node> pq; Node temp; temp.x = c_x; temp.y = c_y; temp.length = 0; visit[c_x][c_y] = true; pq.push(temp); while (pq.empty() == false) { Node temp = pq.front(); pq.pop(); if (temp.x == x && temp.y == y) { return temp.length; } for (int i = 0; i < 4; i++) { if (arr[temp.x + pos[i][0]][temp.y + pos[i][1]] == '.' && visit[temp.x + pos[i][0]][temp.y + pos[i][1]]==false) { Node t; t.x = temp.x + pos[i][0]; t.y = temp.y + pos[i][1]; t.length = temp.length + 1; visit[t.x][t.y] = true; pq.push(t); } } } return -1; } int main() { int n, m; cin >> n >> m; int x1, y1, x2, y2; cin >> x1 >> y1 >> x2 >> y2; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { cin >> arr[i][j]; } } int res = BFS(x1,y1,x2,y2,n,m); cout << res << endl; }