View Code of Problem 3852

#include<iostream>
#include<cmath>
using namespace std;
double a[101][101];
int visit[101][101];
int n, m, l,sum;
void walk(int i, int j,int cnt)
{
	if (i<1 || i>n || j<1 || j>m)
		return;
	if (i == n && j == m)
	{
		if (cnt < sum)
			sum = cnt;
		return;
	}
	visit[i][j] = 1;
	if (fabs(a[i + 1][j] - a[i][j]) <= l&&visit[i+1][j]==0)
		walk(i + 1, j, cnt + 1);
	if (fabs(a[i][j + 1] - a[i][j]) <= l && visit[i][j + 1] == 0)
		walk(i, j + 1, cnt + 1);
	if (fabs(a[i][j - 1] - a[i][j]) <= l && visit[i][j - 1] == 0)
		walk(i, j - 1, cnt + 1);
	if (fabs(a[i - 1][j] - a[i][j]) <= l && visit[i - 1][j] == 0)
		walk(i - 1, j, cnt + 1);
	visit[i][j] = 0;
}
int main() 
{
	int t;
	cin >> t;
	while (t--)
	{
		cin >> n >> m >> l;
		for (int i = 1;i <= n;i++)
		{
			for (int j = 1;j <= m;j++)
			{
				cin >> a[i][j];
			}
		}
		sum = n * m;
		walk(1, 1, 0);
		cout << sum << endl;
	}
}

Double click to view unformatted code.


Back to problem 3852