我不能使用任何外部库,所以我试图想一些自己构建数据结构的方法。我想的可能是这样的:
public class Node{
Set<Edge> adjacent;
int value;
}
public class Edge{
Node target;
int weight;
}
但我猜这可能是一种更好的方法。
我最终使用此图表是在其上运行Bellman Ford算法,但我显然需要首先运行图表!
答案 0 :(得分:11)
答案很大程度上取决于您计划应用于图表的算法。
表示图表有两种常用方法 - adjacency list和adjacency matrix。在您的情况下,邻接矩阵是表示权重的整数的正方形数组。您的陈述使用邻接列表。
有些算法在邻接矩阵上运行得更好(例如Floyd-Warshall算法)。其他算法在邻接列表上工作得更好(例如Dijkstra算法)。如果图表稀疏,则使用邻接矩阵可能会令人望而却步。
答案 1 :(得分:3)
像往常一样,您可以将图表表示为邻接列表或邻接矩阵。选择实际上取决于问题的细节。
使用邻接矩阵,你可以简单地得到一个整数矩阵,代表权重。
如果你决定拥有一个邻接列表,你可以简单地存储一个整数列表 (假设图表的节点由整数值标识),类似于您所做的。
答案 2 :(得分:1)
您可以在非加权图表中使用节点,保存与其连接的节点列表,并另外添加与连接关联的权重:
public class Node{
int value;
HashMap<Node,Integer> adjacency;
}