java - 使用给定的数据结构查找从节点 A 到节点 B 的路径
问题描述
我遇到了一个棘手的问题,因为我无法以递归的方式思考找到解决方案。
这是我的数据结构:-
public class Airport {
String name;
Set<Neighbour> neighbours;
...
}
public class Neighbour {
Airport airport;
double costToReach;
...
}
我正在尝试从一个Airport
到另一个获取可用路径(列表列表) Airport
。
List<List<Airport>> getPaths(Airport source, Airport destination) {
// Logic goes here
}
预期的输入样本:-
Source airport - Mumbai
Destination airport - Delhi
预期输出样本:-
Mumbai -> Pune -> Delhi
Mumbai -> Ahmedabad -> Noida -> Delhi
任何帮助将非常感激。谢谢!
解决方案
您可以做的是创建一个方法,该方法采用起点、目标点和一组已访问的机场。在此方法中,您可以:
- 如果起点是终点,则返回路径。
- 遍历起点的所有邻居减去所有已访问的机场,并使用邻居作为起点并使用已访问机场的集合加上当前起点进行递归调用(确保克隆此集合,或使用堆栈并在递归调用后恢复其状态)。
如果这样做,您可以有效地尝试从给定起点到给定目标点的每条路径,而无需两次访问同一个机场。我将把这个递归方法的返回值作为练习留给你(返回值必须用于获取找到的成功路径)。
推荐阅读
- python - Tkinter 包布局:弹力带类比
- android - 请选择安卓sdk
- python - 使用具有固定参数的 scipy.otimize.least_squares 时更改函数后的 TypeError (Python)
- php - 使用 Google 电子表格 API 为不同用户制作 token.json 与 credentials.json 的程序是什么?
- python - self.ParseError('字符串缺少结束引号:%r' % (text,))
- excel - Excel:如何找到供需之间的交点(平衡点)?
- katalon-studio - Katalon Studio 中的 If/Else 语句
- amazon - How do I extract business, advertisement and other reports from amazon MWS API?
- operating-system - BTRFS 文件系统
- c++ - QT3D 中的二维网格