#include #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--; v = min(v, n * 18); 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 dy[] = {0, -1, 0, 1}; constexpr int dx[] = {-1, 0, 1, 0}; while (!que.empty()) { auto [y, x, l] = que.front(); if (y == gy && x == gx) { cout << dist[y][x][l] << endl; return 0; } que.pop(); for (int i = 0; i < 4; i++) { int ny = y + dy[i], nx = x + dx[i]; if (ny < 0 || ny >= n || nx < 0 || nx >= n) { continue; } int nl = l - L[ny][nx]; if (nl <= 0) { continue; } if (dist[ny][nx][nl] > dist[y][x][l] + 1) { dist[ny][nx][nl] = dist[y][x][l] + 1; que.emplace(ny, nx, nl); } } } cout << -1 << endl; }