我有一个图,我需要创建从单个节点到距该节点一定距离内的所有节点的有向边,从初始节点指向距离内的节点。然后,它从距离初始节点较远的节点到这些节点距离内的节点创建边,并继续下去,直到每个节点都至少有一条边。
我在代码中概念化这一点并将其付诸实践时遇到了问题。我目前有以下代码,该代码可以工作,但不够好,因为有时远离初始节点的节点没有边缘:
//create patient zero
graphVer.get(0).getValue().setInfected(true);
graphVer.get(0).getValue().setRecentlyInfected(true);
graphVer.get(0).getValue().setLevel(0);
for(int i = 0; i < graphVer.size();i++) {
for(int j = 0; j < graphVer.size();j++) {
//checks each vertex against every other vertex, and if their distance is within limits and they aren't equal to each other, then create an edge between them
if(distance(graphVer.get(i).getValue().getX(), graphVer.get(i).getValue().getY(),graphVer.get(j).getValue().getX(),graphVer.get(j).getValue().getY()) < dis.getRange()) {
if(i != j) {
//makes sure that there is only one edge between two nodes and directs it based on where patient zero is
if(graphVer.get(i).getValue().getLevel() <= i && graphVer.get(j).getValue().getLevel() > graphVer.get(i).getValue().getLevel()) {
graphEdge.add(new Edge<>(0,graphVer.get(i),graphVer.get(j)));
graphVer.get(j).getValue().setLevel(i+1);
}
}
}
}
}
我没有包含顶点创建的代码,它只是在方形边界内随机创建顶点,确保没有重叠。 graphVer 是图中所有顶点的数组列表,graphEdge 是图中所有边的数组列表。
有什么更好的方法可以让它每次都能正常工作?
最佳答案
你的措辞有点困惑,你不是只想到达距原始节点一定距离内的节点吗?如果是这种情况,那么“有时距离初始节点较远的节点没有边缘”将是您想要发生的情况。
关于java - 如何创建从单个节点相对于图中距离传播的边,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55836477/