#include using namespace std; int dp[100][100][1800]; int mx[]={1,-1,0,0},my[]={0,0,1,-1}; int n; bool check(int x,int y){ if(0>x||n<=x) return false; if(0>y||n<=y) return false; return true; } int main(){ int v,sx,sy,gx,gy; cin>>n>>v>>sx>>sy>>gx>>gy; sx--; sy--; gx--; gy--; int data[n][n]; for(int i=0;i>data[i][j]; } for(int i=0;i<100;i++){ for(int j=0;j<100;j++){ for(int k=0;k<1800;k++) dp[i][j][k]=1<<30; } } dp[sy][sx][0]=0; queue > q; q.push(make_tuple(sx,sy,0)); while(!q.empty()){ auto now=q.front(); q.pop(); int nx=get<0>(now),ny=get<1>(now),cost=get<2>(now); if(nx==gx&&ny==gy){ cout<=v) continue; int nex=nx+mx[i],ney=ny+my[i]; if(dp[ney][nex][cost+data[ney][nex]]>dp[ny][nx][cost]+1){ dp[ney][nex][cost+data[ney][nex]]=dp[ny][nx][cost]+1; q.push(make_tuple(nex,ney,cost+data[ney][nex])); } } } } cout<<-1<