我正在尝试在java中创建一个具有不同节点的图形。有些节点会连接到其他节点,有些节点则不会。如果它们已连接,则该节点的某个布尔值将为true,另一个变量将保持其所连接节点的值。
...关于你们认为什么是最好的解决方法的任何建议?
答案 0 :(得分:3)
表示图形的两种最常用方式是邻接矩阵和邻接列表。设n是节点数。
邻接矩阵A是布尔值的n×n矩阵,如果节点i和j连接则A(i,j)= 1,如果不连接则为0。
在邻接列表中,每个节点的表示都维护着它所连接的节点列表(邻近)。
现在的问题是你想要用图表做什么。如果它很简单,那么滚动自己可能是有意义的。如果没有,你可能想在网上寻找一个java库来处理图形。已提及JGraphT。
如果你想使用邻接矩阵,那么你可以很容易地用Java表示它作为bool或int的二维数组。您需要为每个节点提供索引。最简单的方法 这样做是为了将Node对象保持在一个数组中,总是以相同的顺序。所以你真的有两个数据结构:一个节点数组,它们是表示你的节点实际上是什么的对象,以及邻接矩阵,它通过它们的索引引用节点。
填充矩阵后,如果通过在所有列(或行)中添加值(0和1)并找到最大值,可以轻松找到连接到大多数其他节点的节点。希望这会有所帮助。
答案 1 :(得分:2)
存储图表有两种标准模型。汤姆描述的是Adjacency List。另一个是独立的Adjacency Matrix。
如果您关心效率,请研究您的情况的稀疏性(边缘越多,矩阵版本对性能更友好)。如果perf不是问题,请使用您宁愿编程的内容......
答案 2 :(得分:1)
创建一个Node
类,并为其提供类型为Node
的实例变量。将其初始化为null - 如果所述节点连接到另一个节点,则此实例变量将引用它;否则,它将保持为空。
如果节点可能连接到多个节点(这对于图表来说很常见),那么使用ArrayList
来存储所述节点所连接的所有节点。
答案 3 :(得分:0)
可能是“Good Java graph algorithm library?”的副本。简短的回答是查看JGraphT。