#include<iostream> #include<cstring> #include<algorithm> #include<queue> #include<stdio.h> #include<string.h> #include<cmath> using namespace std; int vist[4][2]={{1,0},{0,1},{-1,0},{0,-1}}; int mapp[101][101]; int book[101][101]; int ti,minn;int n,m; void dfs(int x,int y,int bu,int pre) { if(x<0||y<0||x>=n||y>=m) return; if(x==n-1&&y==m-1) { if(bu<minn) minn=bu; // cout<<minn<<endl; } for(int i=0;i<4;i++) { int tx=x+vist[i][0]; int ty=y+vist[i][1]; if(abs(pre-mapp[tx][ty])>ti||book[tx][ty]||tx<0||tx>=n||ty<0||ty>=m) continue; book[tx][ty]=1; dfs(tx,ty,bu+1,mapp[tx][ty]); book[x][y]=0; } } int main() { int times; cin>>times; while(times--) { minn=10001; memset(book,0,sizeof(book)); cin>>n>>m>>ti; for(int i=0;i<n;i++) for(int j=0;j<m;j++) cin>>mapp[i][j]; book[0][0]=1; dfs(0,0,1,mapp[0][0]); minn--; if(minn<n*m) cout<<minn; else cout<<-1<<endl; } return 0; } |
Double click to view unformatted code.