【问题标题】:Finding the shortest path in a maze在迷宫中寻找最短路径
【发布时间】:2012-04-08 23:47:00
【问题描述】:

我是业余程序员,正在学习如何编程。 我从来没有上过任何计算机科学课程,所以我很难解决这个小问题:

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 人可以帮助我吗?谢谢

【问题讨论】:

  • en.wikipedia.org/wiki/A*_search_algorithm
  • 每个房间都需要付费的路线。然后你就可以遍历路线了。
  • @JakobBowyer 只需 1 作为成本 :)
  • @jonmorgan:字母表的第一个字母与它有什么关系:P
  • @mellamokb:名称是“A* 搜索算法”。 Markdown 只是愚蠢。 fixed link 如果有帮助:)

标签: java algorithm shortest-path maze


【解决方案1】:

您正在寻找BFS

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

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

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

【讨论】:

  • 有了这些知识,我能够完成这个。谢谢!
  • 欢迎您@Nancy。如果您发现一个有用的答案,请不要忘记accept 一个答案。
【解决方案2】:

您想编写广度优先搜索。关于这个主题有很多可用的资源。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-27
    相关资源
    最近更新 更多