将Edgelist转换为邻接列表

时间:2018-12-04 09:30:46

标签: java graph adjacency-list

我有一个对象,向我显示了索引之间的连接,并具有变量return users.stream() .filter(user -> id.equals(user.getId())) .map( user -> Optional.ofNullable( user.getData() ).orElseGet( () -> emptyMap() ) ) .collect(Collectors.toList()) ; index1。基于索引的连接,我想创建一棵总是从index2开始的树。

在此示例中,002连接在一起,因此将它们首先添加到树中,然后从最低的位置继续,我需要找出什么数字连接到5,在这种情况下为26等。

7

似乎我需要将其转换为邻接表。

作为最终结果,我需要遍历树或所有节点{index1=0, index2=2} {index1=3, index2=4} {index1=1, index2=4} {index1=0, index2=5} {index1=2, index2=6} {index1=1, index2=5} {index1=2, index2=7} 0 2 5 6 7 1 4 并获得结果,在这种情况下,结果将是:

preorder traverse

我应该使用什么来获得理想的结果?

或者如何创建一个0 - 2 - 6 - 7 - 5 - 1 - 4 ,可以在其中添加到根目录,这意味着如果我要给值Adjacency List然后给定(0, 2),它将添加那些不在下面的值彼此分开但彼此分开,然后(0,5)将进入(2, 6) 2下。

2 个答案:

答案 0 :(得分:0)

优化程度不高,但我认为它会起作用。

static class Connection{
  int index1;
  int index2;
  Connection(int index1,int index2){
       this.index1=index1;
       this.index2=index2;
  }
}

private static List<Connection> connections;
private static List<List<Integer>> adjList;
private static int max;

static void makeAdjList(){
     for(int i=0;i<max;i++){
        for(int j=0;j<connections.size();j++){
            Connection c=connection.get(j);
            if(c.index1==0||c.index2==0){
               adjList.get(i).add(c.index1==0?c.index2:index1);
            }
        }
     }
}

答案 1 :(得分:0)

import os

vertexNum =#Vertexes
edgeNum = #Edges
edgeList = [[0,[-3]]]

source = "destination of edgelist file"

f = open(source, "r")
l = f.readlines()
l2 = [line.rstrip('\n') for line in l]

for i in range(1,vertexNum+1):
    edgeList.append([i,[]])

for line in l2:
    graph_Local = [line.split(" ")[0],line.split(" ")[1]]
    edgeList[int(graph_Local[0])][1].append(int(graph_Local[1]))
    edgeList[int(graph_Local[1])][1].append(int(graph_Local[0]))


with open('destination to save adjacency list','w') as eFile:
    for item in edgeList:
        eFile.write("%s\n" % item[1])

eFile.close()