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

Hos*_*ser 8 java graph

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

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

public class Edge{
    Node target;
    int weight;
}
Run Code Online (Sandbox Code Playgroud)

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

我最终使用这个图是在它上运行Bellman Ford算法,但我显然首先需要一个功能图!

das*_*ght 11

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

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

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

  • @Hoser是的,它们都支持方向:矩阵有两个不同的点用于存储从"A"到"B"(`矩阵[A] [B]`)的边和从"B"到"A"的边缘(`矩阵[B] [A]`).邻接列表也是方向性的 - 节点"A"可以从其倒数边缘的权重(如果有的话)的边缘到"B"具有不同的权重. (2认同)