#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
const int N = 505,M=250005;
int h[N], e[M], ne[M], w[M], idx;
char g[N][N];
int s,t;
int dx[4] = { -1,0,1,0 };
int dy[4] = { 0,1,0,-1 };
int dist[N],st[N];
void add(int a, int b, int c) {
e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx++;
}
void SPFA() {
memset(dist, 0x3f, sizeof dist);
memset(st, 0, sizeof st);
queue<int> q;
q.push(s);
st[s] = 1;
dist[s] = 0;
while (!q.empty()) {
int v = q.front();
q.pop();
st[v] = 0;
for (int i = h[v]; ~i; i = ne[i]) {
int t = e[i];
if (dist[t] > dist[v] + w[i]) {
dist[t] = dist[v] + w[i];
if (!st[t]) {
q.push(t);
st[t] = 1;
}
}
}
}
}
int main() {
int n, m;
while (cin >> n >> m) {
if (!n && !m)break;
memset(g, 0, sizeof g);
memset(h, -1, sizeof h);
idx = 0;
for (int i = 0; i < n; ++i)
for (int j = 0; j < m; ++j)
cin >> g[i][j];
int sx, sy, ex, ey;
cin >> sx >> sy >> ex >> ey;
for (int i = 0; i < n; ++i)
for (int j = 0; j < m; ++j) {
for (int k = 0; k < 4; ++k) {
int nx = i + dx[k], ny = j + dy[k];
if (nx < 0 || nx >= n || ny < 0 || ny >= m)continue;
if (g[nx][ny] != g[i][j]) {
add(nx * m + ny, i * m + j, 1);
}
else {
add(nx * m + ny, i * m + j, 0);
}
}
}
int s = sx * m + sy, t = ex * m + ey;
SPFA();
cout << dist[t]<<endl;
}
}
就过了第一个点,第二个WA,后两个RE。。233