九章算法 | 网易面试题:骑士的最短路线

这篇博客介绍了如何使用BFS算法解决一个网易面试题:在给定的棋盘上,从起点到终点找到骑士的最短路线。题目要求骑士不能碰到障碍物,并返回路径长度。通过构建方向数组并遍历八个可能的移动方向,实现搜索并标记已访问的格子。算法的时间复杂度为O(n*m),空间复杂度同样为O(n*m)。博客还提供了更多关于此题目的解题参考。
摘要由CSDN通过智能技术生成

给定骑士在棋盘上的 ​初始​ 位置(一个2进制矩阵 ​0​ 表示空 ​1​ 表示有障碍物),找到到达 ​终点​ 的最短路线,返回路线的长度。如果骑士不能到达则返回 ​-1​ 。

  • 起点跟终点必定为空.
  • 骑士不能碰到障碍物.
  • 路径长度指骑士走的步数.

在线评测地址:LintCode 领扣

说明

如果骑士的位置为 (x,y),他下一步可以到达以下这些位置:

(x + 1, y + 2)
(x + 1, y - 2)
(x - 1, y + 2)
(x - 1, y - 2)
(x + 2, y + 1)
(x + 2, y - 1)
(x - 2, y + 1)
(x - 2, y - 1)

样例

例1:

输入:
[[0,0,0],
 [0,0,0],
 [0,0,0]]
source = [2, 0] destination = [2, 2] 

输出: 2
解释:
[2,0]->[0,1]->[2,2] 

例2:

输入:
[[0,1,0],
 [0,0,1],
 [0,0,0]]
source = [2, 0] destination = [2, 2] 

输出:-1

算法:BFS

朴素​BFS​搜搜最短路,BFS概括来说就是像雷达一样,一层一层进行寻找目标点。当找到目标点后进行回溯。从而找到最佳路径。也就是说每走一步都要找到到达该点的最短的路径,最终得到到达所有点的最短路径,这题每一次的下一步做了规定,按照日字形跳到下一步。

  • 根据下一跳位置建立方向数组
  • ​dx=[1, 1, 2, 2, -1, -1, -2, -2]​
  • ​dy=[2, -2, 1, -1, 2, -2, 1, -1]​
  • 遍历八个方向,进行搜索
  • 用​grid​数组标注是否访问过某点
  • 注意判断下一跳的位置是否越界

复杂度分析

  • 时间复杂度​O(n*m)​
    • 最多跑一边图 n为图的行数,m为图的列数,最多跑一边图,即n*m
  • 空间复杂度​O(n*m)​
    • 所有点的信息 n为图的行数,m为图的列数
public class Solution {
     
    /**
     * @param grid: a chessboard included 0 (false) and 1 (true)
     * @param source: a point
     * @param destination: a point
     * @return: the shortest path 
     */
    public int shortestPath
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值