这里说一下自己的思路,欢迎各位大佬一起交流先回顾下题目:在中国象棋中,马的移动方式是按照 "日" 字行进:如果马在一张无限大的棋盘上,起始坐标为[0, 0],我们给定想要去的目标点 [x, y],要求输出马移动到目标点需要的最小移动次数这里我用的是BFS,也就是广度优先算法(1)为什么用bfs而不用dfs?为什么会想用广度优先遍历呢?而不是用深度优先遍历呢?因为这里的题目为:"棋盘无限大" ,所以我们没有边界可以判断,所以如果用深度遍历,可以一直递归下去,这样我们很难找到最小跳跃次数。但如果用广度优先遍历,第一层遍历就是起点的八个跳跃点,此时每个点的跳跃次数都为1;第二层遍历的话跳跃次数为2,所以只要我们找到了跳跃点为目标点,就可以直接把跳跃次数输出,ta就是最小跳跃次数。因为第一次遍历,考虑的是跳跃次数为1的情况能不能到目标点,第二次遍历考虑的是跳跃次数为2的情况能不能到目标点比如我们跳到了目标点,跳跃次数为4,则说明了:跳跃次数为1、跳跃次数为2、跳跃次数为3的所有跳跃可能都找不到目标点,而跳跃次数为4找到了目标点,所以最小跳跃次数自然为4了(2)(2)思路起点为【0, 0】当跳跃次数为1次的情况(如下图1所示:)即跳跃次数为1的情况有8种当跳跃次数为2次时,就有64种情况了,结合之前跳跃次数为1的情况就有 8 + 64 = 72种情况(如下图2所示:)当跳跃次数为3次时,就有8*8*8种情况了,结合之前的情况就有 584种 情况所以当我们找到目标点时,看目前遍历的格子数量在哪个区间,就可以得到跳跃次数了,第一个遍历到的目标点也肯定是消耗了最小的跳跃次数(3)代码示例如下图3所示