java - 如何创建从单个节点相对于图中距离传播的边

标签 java arraylist nodes graph-theory

我有一个图,我需要创建从单个节点到距该节点一定距离内的所有节点的有向边,从初始节点指向距离内的节点。然后,它从距离初始节点较远的节点到这些节点距离内的节点创建边,并继续下去,直到每个节点都至少有一条边。

我在代码中概念化这一点并将其付诸实践时遇到了问题。我目前有以下代码,该代码可以工作,但不够好,因为有时远离初始节点的节点没有边缘:

//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/

相关文章:

java - 两部分,删除Java中节点中的最后一个元素并替换两个元素

java - 如何将节点添加到不是主要父对象 (javafx) 的对象?

java - 这个 Java 方法签名的简单英语翻译是什么?

java - 如何将矩阵转换为 2D ArrayList Java

android - 填充来自不同类android的 ListView

c# - 如何从 List<int> 中删除负值?

javascript - 在完成加载之前使用 DomNodeInserted 重写 HTML

java - 为下面的字符串创建正则表达式模式

java - 为什么我的代码不能正常工作?

java - 如何避免接口(interface)的通用编译器警告