寻找迷宫中的最短路径

时间:2012-03-24 21:27:18

标签: java algorithm shortest-path maze

我是业余程序员,学习如何编程。 我从未参加任何计算机科学课程,因此我遇到了这个微不足道的问题:

class Room {
    String name;
    ArrayList<Room> neighbors = new ArrayList<Room>();

    // constructor with name
    // getters
    void addNeighbor(Room room) {
        neighbors.add(room);
    }
}

class Finder {
    void findShortestPath(Room start, Room end) {
        // ?
    }
}

每个房间都有一些邻居。超过4,所以它不像矩阵导向的问题。您将获得最终房间,并且必须找到从起始房间开始的最短路径(比较房间的名称)。结果应该是&#34;方式&#34;喜欢:

开始:厨房

结束:厕所

路径:厨房,客厅,走廊,卧室,卫生间

我想我必须对房间使用一些递归,我认为我应该保存在已经存在的堆栈中。但我真的不知道如何开始。

你们中的一些CS人能帮帮我吗?感谢

2 个答案:

答案 0 :(得分:3)

您正在寻找BFS

在您的情况下,图表G = (V,E)实际上是V= { all rooms }E = {(u,v), (v,u) | u and v are neighboring rooms }

请注意,在算法开始之前,您并不关心所有边缘[邻居] - 您知道如何使用neighbors动态计算相关的边[和房间]集合领域。
这是正确的,因为你需要为你的道路使用的每一个“边缘” - 当你发现距离源头的路径更近的房间时“被发现”。

您可以查看this post - 如何在运行BFS后找到实际路径。

答案 1 :(得分:0)

您想要编写广度优先搜索。有关此主题的资源很多。