#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.