动态规划 到棋盘指定位置方法数

89 阅读1分钟

题目

棋盘大小为8行9列,从棋盘 (0,0) 位置出发,到达 (x,y) 位置,要求必须得走k步,求一共多少种走法,规定每次只能走日字的对角

  • 提供一种从后往前的递归方法,从(x,y)位置还原能走到该位置的点,然后一步一步往前推,直到 k 步走完,且最终落点在(0,0)位置的符合一种解法

image.png

function process(x, y, step) {
  // 从0开始计数,棋盘大小是9行10列
  if (x < 0 || x > 8 || y < 0 || y > 9) {
    return 0;
  }

  if (step === 0 && x === 0 && y === 0) {
    return 1;
  }
  // 往前推八个方向的落点
  return (
    process(x - 1, y + 2, step - 1) +
    process(x + 1, y + 2, step - 1) +
    process(x + 2, y + 1, step - 1) +
    process(x + 2, y - 1, step - 1) +
    process(x + 1, y - 2, step - 1) +
    process(x - 1, y - 2, step - 1) +
    process(x - 2, y - 1, step - 1) +
    process(x - 2, y + 1, step - 1)
  );
}