#include #include #include #include #include int main() { using namespace std; int n, v, sx, sy, gx, gy; cin >> n >> v >> sx >> sy >> gx >> gy; sx--; sy--; gx--; gy--; vector L(n, vector(n)); for (auto &l : L) { for (auto &e : l) { cin >> e; } } constexpr int INF = 1e9; vector dist(n, vector(n, vector(v + 1, INF))); dist[sy][sx][v] = 0; queue> que; que.emplace(sy, sx, v); constexpr int dx[] = {-1, 0, 1, 0}; constexpr int dy[] = {0, -1, 0, 1}; while (!que.empty()) { auto [x, y, l] = que.front(); que.pop(); for (int i = 0; i < 4; i++) { int nx = x + dx[i], ny = y + dy[i]; if (nx < 0 || nx >= n || ny < 0 || ny >= n) { continue; } int nl = l - L[nx][ny]; if (nl <= 0) { continue; } if (dist[nx][ny][nl] > dist[x][y][l] + 1) { dist[nx][ny][nl] = dist[x][y][l] + 1; que.emplace(nx, ny, nl); } } } int ans = INF; for (int l = 0; l <= v; l++) { ans = min(ans, dist[gy][gx][l]); } cout << (ans < INF ? ans : -1) << endl; }