Java 表示节点之间路径长度的数据结构?
好吧,我是Java新手,我之所以问这个问题,是因为我确信有一种更好的简单方法来处理这个问题,那里更有经验的人可能会给我一些建议 我有一张城市图,图中显示了城市之间的路径长度。我试图用Java构建一个算法,从一个起点城市到一个终点城市,寻找最短路径。每个城市都有一个名字和地图坐标。更具体地说,我将使用A*算法,但这(可能)对我的问题并不重要 我的问题是,我正试图找出一种好的方法,用长度表示节点和节点之间的路径 我能想到的最简单的方法是创建一个巨大的二维正方形数组,每个城市都由一个索引表示,其中连接的城市可以由它们在数组中相交的位置表示。我给每个城市分配了一个索引。在数组值中,0位于没有连接的位置,距离位于有连接的位置 我还将有一个带有“index”属性的city子类,其索引值在数组中。这样做的缺点是要找出哪些城市有连接,必须有额外的步骤来查找数组中的城市索引,还必须查找哪个连接城市有连接索引Java 表示节点之间路径长度的数据结构?,java,graph,artificial-intelligence,Java,Graph,Artificial Intelligence,好吧,我是Java新手,我之所以问这个问题,是因为我确信有一种更好的简单方法来处理这个问题,那里更有经验的人可能会给我一些建议 我有一张城市图,图中显示了城市之间的路径长度。我试图用Java构建一个算法,从一个起点城市到一个终点城市,寻找最短路径。每个城市都有一个名字和地图坐标。更具体地说,我将使用A*算法,但这(可能)对我的问题并不重要 我的问题是,我正试图找出一种好的方法,用长度表示节点和节点之间的路径 我能想到的最简单的方法是创建一个巨大的二维正方形数组,每个城市都由一个索引表示,其中连接
有没有更好的方法来表示这一点 另一种方法是使用节点结构来存储指向相邻节点的所有指针 例如 如果您的数据结构中有类似的内容
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)。这假设图从未更改,或者很少更改。它只为稀疏图使用较少的空间。对于密集图,指针/对象的开销占主导地位。我喜欢这个概念。希望我能选择两个最好的答案。结构图在说明其工作原理方面有很大帮助。谢谢。美丽而简单。我喜欢这个。