Java 表示节点之间路径长度的数据结构?

Java 表示节点之间路径长度的数据结构?,java,graph,artificial-intelligence,Java,Graph,Artificial Intelligence,好吧,我是Java新手,我之所以问这个问题,是因为我确信有一种更好的简单方法来处理这个问题,那里更有经验的人可能会给我一些建议 我有一张城市图,图中显示了城市之间的路径长度。我试图用Java构建一个算法,从一个起点城市到一个终点城市,寻找最短路径。每个城市都有一个名字和地图坐标。更具体地说,我将使用A*算法,但这(可能)对我的问题并不重要 我的问题是,我正试图找出一种好的方法,用长度表示节点和节点之间的路径 我能想到的最简单的方法是创建一个巨大的二维正方形数组,每个城市都由一个索引表示,其中连接

好吧,我是Java新手,我之所以问这个问题,是因为我确信有一种更好的简单方法来处理这个问题,那里更有经验的人可能会给我一些建议

我有一张城市图,图中显示了城市之间的路径长度。我试图用Java构建一个算法,从一个起点城市到一个终点城市,寻找最短路径。每个城市都有一个名字和地图坐标。更具体地说,我将使用A*算法,但这(可能)对我的问题并不重要

我的问题是,我正试图找出一种好的方法,用长度表示节点和节点之间的路径

我能想到的最简单的方法是创建一个巨大的二维正方形数组,每个城市都由一个索引表示,其中连接的城市可以由它们在数组中相交的位置表示。我给每个城市分配了一个索引。在数组值中,0位于没有连接的位置,距离位于有连接的位置

我还将有一个带有“index”属性的city子类,其索引值在数组中。这样做的缺点是要找出哪些城市有连接,必须有额外的步骤来查找数组中的城市索引,还必须查找哪个连接城市有连接索引


有没有更好的方法来表示这一点

另一种方法是使用节点结构来存储指向相邻节点的所有指针

例如

如果您的数据结构中有类似的内容

   A   B   C

A  /   0   1

B  0   /   1

C  1   1   /
在新的结构中,它将是

A: [C]
B: [C]
C: [AB]
与2D阵列方法相比,这种方法需要更长的时间来检查两个节点是否连接,但占用的空间更小

class Node {
  List<Link> link;
  String cityName;
}
class Link {
  Node destinationCity;
  Long distance;
}
类节点{
列表链接;
字符串cityName;
}
类链接{
节点目的性;
长途;
}

您可以使用Floyd Warshall算法(在O(n^3)中运行)缓存最短路径距离(和DP数组),并在O(1)中返回最短路径距离,最多在O(n)中返回最短路径距离。使用的空间是O(n^2)。这假设图从未更改,或者很少更改。它只为稀疏图使用较少的空间。对于密集图,指针/对象的开销占主导地位。我喜欢这个概念。希望我能选择两个最好的答案。结构图在说明其工作原理方面有很大帮助。谢谢。美丽而简单。我喜欢这个。