繁体   English   中英

寻找迷宫中的最短路径

[英]Finding the shortest path in a 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,所以它不像矩阵导向的问题。 您将获得最终房间,并且必须找到从起始房间开始的最短路径(比较房间的名称)。 结果应该是“方式”,如:

开始:厨房

结束:厕所

路径:厨房,客厅,走廊,卧室,厕所

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

你们中的一些CS人可以帮助我吗? 谢谢

您正在寻找BFS

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

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

您可以查看这篇文章 - 如何在运行BFS后找到实际路径。

你想写一个广度优先的搜索。 有关此主题的资源很多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM