题目大概如下:在一个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的最短距离。