有哪些方法可以代表Java中的加权有向图?

时间:2012-11-19 03:46:49

标签: java graph

我不能使用任何外部库,所以我试图想一些自己构建数据结构的方法。我想的可能是这样的:

public class Node{
    Set<Edge> adjacent;
    int value;
}

public class Edge{
    Node target;
    int weight;
}

但我猜这可能是一种更好的方法。

我最终使用此图表是在其上运行Bellman Ford算法,但我显然需要首先运行图表!

3 个答案:

答案 0 :(得分:11)

答案很大程度上取决于您计划应用于图表的算法。

表示图表有两种常用方法 - adjacency listadjacency matrix。在您的情况下,邻接矩阵是表示权重的整数的正方形数组。您的陈述使用邻接列表。

有些算法在邻接矩阵上运行得更好(例如Floyd-Warshall算法)。其他算法在邻接列表上工作得更好(例如Dijkstra算法)。如果图表稀疏,则使用邻接矩阵可能会令人望而却步。

答案 1 :(得分:3)

像往常一样,您可以将图表表示为邻接列表或邻接矩阵。选择实际上取决于问题的细节。

使用邻接矩阵,你可以简单地得到一个整数矩阵,代表权重。

如果你决定拥有一个邻接列表,你可以简单地存储一个整数列表 (假设图表的节点由整数值标识),类似于您所做的。

答案 2 :(得分:1)

您可以在非加权图表中使用节点,保存与其连接的节点列表,并另外添加与连接关联的权重:

public class Node{
    int value;
    HashMap<Node,Integer> adjacency;
}