Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中将有向无环图表示为二维数组_Java_Arrays_Multidimensional Array - Fatal编程技术网

在Java中将有向无环图表示为二维数组

在Java中将有向无环图表示为二维数组,java,arrays,multidimensional-array,Java,Arrays,Multidimensional Array,如果每一行包含一个特定节点的直接外邻居,我如何将一个有向无环图表示为一个二维数组。例如,如果我有一个数组int[][]边,边[0]={1,2,3}表示从节点0到节点1、2和3有边。int n; int n; List<Integer>[] adj; AdjacencyLists(int n) { adj = (List<Integer>[])new List[n]; for (int i = 0; i < n; i++) adj[i

如果每一行包含一个特定节点的直接外邻居,我如何将一个有向无环图表示为一个二维数组。例如,如果我有一个数组int[][]边,边[0]={1,2,3}表示从节点0到节点1、2和3有边。

int n;
int n;
List<Integer>[] adj;
AdjacencyLists(int n) {
    adj = (List<Integer>[])new List[n];
    for (int i = 0; i < n; i++) 
        adj[i] = new ArrayList<Integer>(Integer.class);
}

.....

adj[a].add(b); // a -> b edge
列表[]形容词; 邻接柱状图(int n){ adj=(列表[])新列表[n]; 对于(int i=0;ib边
如果必须使用2D数组(至少在Java中2D数组不能稀疏),则需要分配一个NxN数组:
boolean[][]边=新的boolean[n][n]

  • 您需要考虑退化情况,其中所有节点都是 在单链中,因此需要
    n-1
  • 您需要允许在任何节点上有一个星形根,因此
    n-1
  • 在一个数组中存储地址要比在
    j
    行、位置
    k
    处简单地存储
    j
    ->
    k
    的边上的“yes”复杂得多。更新后者要快得多

  • 显然,明智的方法是从源节点到目标节点的哈希映射,但这显然不是您想要的。

    谢谢您的回答,但它并没有真正回答我的问题。它怎么没有回答?只需将节点分别放在a和b的位置,每个节点都将有所有的Neughbour。我需要使用二维数组,而不是列表。这是一样的…任何方法都可以使用矩阵来确定两个节点是否连接,但无法快速获得,所有节点都连接到特定节点。我如何使用ArrayStack?我需要导入什么?我必须测试一个方法,该方法将表示有向无环图的二维数组作为输入,这就是我需要它的原因。你能举个例子吗?因为我不太明白你的意思?