#include <stdio.h> #include <queue> #include <math.h> #include <algorithm> #define INF 0x3f3f3f3f using namespace std; typedef pair<int, int> P; int maze[105][105]; int sx, sy; int gx, gy; int n, m, l; int d[105][105]; int dx[4] = {1, 0, -1, 0}, dy[4] = {0, 1, 0, -1}; int myabs(int x) { if(x < 0) x = - x; return x; } int bfs() { queue<P> que; for(int i = 1; i <= n; i++) { for(int j = 1; j <= m; j++) { d[i][j] = INF; } } que.push(P(sx, sy)); d[sx][sy] = 0; while(que.size()) { P p = que.front(); que.pop(); if(p.first == gx && p.second == gy) break; for(int i = 0; i < 4; i++) { int nx = p.first + dx[i], ny = p.second + dy[i]; if(1 <= nx && nx <= n && 0 <= ny && ny <= m && myabs(maze[nx][ny] - maze[p.first][p.second]) <= l && d[nx][ny] == INF) { que.push(P(nx, ny)); d[nx][ny] = d[p.first][p.second] + 1; } } } return d[gx][gy]; } void solve() { int res = bfs(); if(res == INF) printf("-1\n"); else printf("%d\n", res); } int main() { int t; scanf("%d", &t); while(t--) { scanf("%d%d%d", &n, &m, &l); for(int i = 1; i <= n; i++) { for(int j = 1; j <= m; j++) { scanf("%d", &maze[i][j]); } } sx = 1; sy = 1; gx = n; gy = m; solve(); } return 0; } |
Double click to view unformatted code.