我是业余程序员,学习如何编程。 我从未参加任何计算机科学课程,因此我遇到了这个微不足道的问题:
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人能帮帮我吗?感谢
答案 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)
您想要编写广度优先搜索。有关此主题的资源很多。