一道求最短距离的笔试题目

博客围绕在10*10矩阵中求两点A和B最短距离的问题展开。作者起初给出的递归算法易导致无穷递归。之后提出两个新思路,一是将矩阵看作图,用Dijstra算法求最短路径;二是设置矩阵存储各点到B的距离,通过不断扩散算法求解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        题目大概如下:在一个10*10的矩阵中有两个点A和B,在矩阵中其他的点要么是0,要么是1。如果是1就表示这个点是一个障碍。现在求从A到B的最短距离。

       题目其实并不难,但是我在考试的时候所给出的算法还是有问题。我当时的思路是A到B的最短距离就是A周围4个点中距离B最近的那个点的距离加一(如果其中某个点是障碍,则距离为无穷大)。我给出了一个递归的算法。但是在后来我上机验证之后发现,该算法需要考虑的情况比较多,一个不注意就非常容易导致无穷递归。

         仔细考虑了一下,发现了另外两个解决思路:

          思路一:这个10×10的矩阵,其实就是一个具有100个节点的图,其中每个节点与周围4个节点相邻,距离是1。于是求A到B的最短距离就变成了求图中两个点之间的最短路径,这可以使用经典的Dijstra算法。不过空间效率比较低。

          思路二:设置一个相同大小的矩阵dist,存储每个点到B点的距离,初值是无穷大。B点到B点的距离是0,B点周围的4个点距离B的距离是1;而这四个点中每个点的周围4个点距离B的距离是min ( 2 , dist [ p ] ),其中dist[p]是在矩阵dist中原来存储的距离值。然后不断的应用该算法,不断的扩散,就可以求出所有点到B的最短距离。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值