View Code of Problem 3852

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


Back to problem 3852