题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入 一行四个数据,棋盘的大小和马的坐标 输出 一个n*m的矩阵,同一行元素之间用空格分离。代表马到达某个点最少要走几步。不能到达则输出-1。
时间: 2023-05-25 15:06:49 浏览: 161
解题思路:
本题属于搜索算法,使用 BFS(广度优先搜索)进行求解。以马所在的位置为起点,不断进行广度扩展,直到扩展到目标位置,或者无法继续扩展为止。
- 首先判断目标点是否在棋盘内,如果不在,直接输出-1;
- 定义一个距离数组,记录每个位置到起点的距离;
- 定义一个队列,初始化为起点,并将距离数组对应位置赋值为 0;
- 利用队列进行广度优先搜索,每次取出队头位置,根据移动规则,将可以到达的位置加入队列;
- 如果目标点已经被搜索到,直接输出距离数组对应位置的值;
- 如果队列已经为空,说明无法到达目标点,输出-1。
算法流程:
- 判断目标点是否在棋盘内,如果不在,直接输出-1;
- 定义距离数组,初始化为-1;
- 将起点加入队列,距离值初始化为0,并将距离数组对应位置设为0;
- 对于队列中的每个位置,判断是否为目标点,如果是,直接返回距离数组对应值;
- 如果不是目标点,根据移动规则,将可以走到的位置加入队列,距离值更新为当前距离值加一,并将距离数组对应位置更新;
- 如果队列为空,说明无法到达目标点,直接输出-1.
C++ 代码:
阅读全文