编辑代码

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void (async function () {
  const [len, tate, x] = (await readline()).split(" ").map(Number);
  const matrix = [];
  for (let i = 0; i < len; i++) {
    matrix.push((await readline()).split(" ").map(Number));
  }
  let ans = 0;
  // offset
  const offsets = [
    [0, 1],
    [1, 0],
    [0, -1],
    [-1, 0],
  ];
  // visited记录[i,j]是否已经走过
  const visited = new Array(len).fill(0).map(() => new Array(tate).fill(false));
  // dfs
  const dfs = (i, j, count) => {
    for (let [offsetX, offsetY] of offsets) {
      const newX = i + offsetX;
      const newY = j + offsetY;
      if (
        newX >= 0 &&
        newX < len &&
        newY >= 0 &&
        newY < tate &&
        Math.abs(matrix[i][j] - matrix[newX][newY]) <= x &&
        visited[newX][newY] == false
      ) {
        visited[newX][newY] = true;
        count = dfs(newX, newY, count + 1);
      }
    }
    return count;
  };
  for (let i = 0; i < len; i++) {
    for (let j = 0; j < tate; j++) {
      if (!visited[i][j]) {
        visited[i][j] = true;
        ans = Math.max(ans, dfs(i, j, 1));
      }
    }
  }
  console.log(ans);
})();