#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; const int INF = INT_MAX / 4; const int dy[] = {-1, 0, 1, 0}; const int dx[] = {0, -1, 0, 1}; int main() { int n, v, sx, sy, gx, gy; cin >> n >> v >> sx >> sy >> gx >> gy; vector > level(n+2, vector(n+2, INF)); for(int y=1; y<=n; ++y){ for(int x=1; x<=n; ++x){ cin >> level[y][x]; } } vector > dp(n+2, vector(n+2, 0)); dp[sy][sx] = v; for(int i=0; i > nextDp(n+2, vector(n+2, 0)); for(int y=1; y<=n; ++y){ for(int x=1; x<=n; ++x){ for(int j=0; j<4; ++j){ int y2 = y + dy[j]; int x2 = x + dx[j]; nextDp[y2][x2] = max(nextDp[y2][x2], dp[y][x] - level[y2][x2]); } } } dp.swap(nextDp); if(dp[gy][gx] > 0){ cout << (i + 1) << endl; return 0; } } cout << -1 << endl; return 0; }