BFS
#define _CRT_SECURE_NO_DEPRECATE
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <vector>
using namespace std;
#define Inf 0x3f3f3f3f
int a[51][51] = { 0 }, book[51][51] = { 0 };
struct node {
int x;
int y;
int step;
};
node que[2501];
int head = 1, tail = 1;
int n, m;
int startX, startY, goalX, goalY;
int main()
{
cin >> n >> m;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cin >> a[i][j];
}
}
cin >> startX >> startY >> goalX >> goalY;
int next[4][2] = { {0,1},{1,0},{0,-1},{-1,0} };
que[1].x = startX;
que[1].y = startY;
que[1].step = 0;
book[startX][startY] = 1;
tail++;
int flag = 0;
while (head < tail) {
for (int i = 0; i <= 3; i++) {
int tx = que[head].x + next[i][0];
int ty = que[head].y + next[i][1];
if (tx > n || tx < 1 || ty<1 || ty>m)continue;
if (a[tx][ty] == 0 && book[tx][ty] == 0) {
book[tx][ty] = 1;
que[tail].x = tx;
que[tail].y = ty;
que[tail].step = que[head].step + 1;
tail++;
}
if (tx == goalX && ty == goalY) {
flag = 1;
break;
}
}
if (flag) break;
head++;
}
cout << que[tail - 1].step << endl;
}
03-10
790
12-14
137