View Code of Problem 3852

#include <iostream>
#include <cmath>
#include <cstring>
using namespace std;
int a[110][110],t,m,n,L,minn,vis[110][110];
int dir[4][2]={-1,0,0,-1,0,1,1,0};
void jump(int x,int y,int step){
	if(x<0||y<0||x>=m||y>=n)
		return ;
	if(x==m-1&&y==n-1){
		minn=min(step,minn);
//		cout<<minn<<"------\n";
		return ;
	}
	vis[x][y]=1;
	for(int i=0;i<4;i++){
		int nx=x+dir[i][0];
		int ny=y+dir[i][1];
//		cout<<"nx:"<<nx<<" ny:"<<ny<<endl;
		if(fabs(a[x][y]-a[nx][ny])<=L&&vis[nx][ny]==0)
			jump(nx,ny,step+1);
	}
	vis[x][y]=0;	
}
int main(){
	cin>>t;
	while(t--){
		cin>>m>>n>>L;
		minn=m*n;
		for(int i=0;i<m;i++){
			for(int j=0;j<n;j++){
				cin>>a[i][j];
			}
		}
		jump(0,0,0);
		cout<<minn<<endl;
		memset(a,0,sizeof(a));
	}
	return 0;
}

Double click to view unformatted code.


Back to problem 3852