当前位置: 首页 > 知识库问答 >
问题:

向图形添加新边并检查总权重是否减少

赫连瀚
2023-03-14

我是图的新手,我正试图在Java解决这个问题:

给定一个具有N个节点和N-1条带权的双向边的图,如果一条新边q允许减少图的总权重,算法必须响应是,否则不允许。

如果存在边“e”,则边“q”满足这个条件,使得可以用“q”替换“e”,从而使图连通并减小其总权重。

我用邻接列表实现了图:

public class Vertex {
private final int element;
private final Set<Edge> edges; // Collection of edges to neighbors

public Vertex(int element) {
    this.element = element;
    edges = new HashSet<>();
}

public int getElement() {
    return element;
}

public boolean addEdge(Edge edge) {
    return edges.add(edge);
}

public List<Edge> getEdges() {
    return new ArrayList<>(edges);
}
}

边缘类:

public class Edge {
   private Vertex to;
private int weight;

public Edge(Vertex to, int weight) {
    super();
    this.to = to;
    this.weight = weight;
}

public Vertex getTo() {
    return to;
}
...

和图形类:

public class Graph {
   private final Set<Vertex> vertices; // Collection of all vertices

   public Graph() {
       vertices = new HashSet<>();
   }

   public List<Vertex> getVertices() {
       return new ArrayList<>(vertices);
   }

   public boolean addVertex(Vertex vertex) {
       return vertices.add(vertex);
   }
}

有没有一个算法我可以用来解决问题?

共有1个答案

徐奇
2023-03-14

给定一个具有N个结点和N-1条加权双向边的图,

那么该图就是一棵树。(假设图是连通的。)树的一个有用的性质是,对于树中的任意两个节点s和t,它们之间存在单个唯一(简单)路径。

如果新边“q”允许减少图的整体权重,算法必须响应“是”,否则不允许。

在树中的两个节点(例如,s和t)之间添加一条新边会创建一个循环。移除这个新循环中的任何边将创建一个同样是树的新(连通)图。

如果存在边“e”,则边“q”满足这个条件,使得可以用“q”替换“e”,从而使图连通并减小其总权重。

只有在从s到t(或t到s)的路径中存在一条或多条边,其权重大于新边Q的权重时,才能满足该条件。如果存在多个这样的边缘,则可以替换其中的任何一个。

 类似资料:
  • 问题内容: 我创建了一个扩展awt.Polygon类的类。我正在尝试编写一种方法,该方法给出了多边形的PathIterator和一个表示顶点的Point,将点添加到路径中的适当位置。 例如:一个点为(0,0)(0,10)(10,10)(10,0)(正方形)的多边形,给定点(1,5)将使多边形(0,0) (1,5)(0,10)(10,10)(10,0) 提前致谢 问题答案: 扩展@normaloci

  • 假定给定一个给定图G(有n个顶点和m条边)的最小生成树T和一个新边e=(u,v),它的权重为w。 (I)检验T是否为MST;(II)如果不是,给出了求图G+E的最小生成树的有效算法。

  • 我有经度和纬度的地理坐标,比如西北和东南经度/纬度。所以,当我得到它们的时候,我把它们转换成公制。因此,这里我得到了我的第一个西北和东南坐标的矩形,然后我有了北,南,西,东坐标的相同公制中的边界矩形。我需要检查这两个直角相交的边,我写的是: 我不确定我做得对不对?我的要求是,如果第二个矩形的边界与第一个矩形的边界相交,那么第二个必须留在左边。否则,过滤。

  • 我有一个有向图,边上的权值是非负的。 我的算法应该做到以下几点: 获取从顶点u到顶点V的所有路径 计算从u到v的每条路径上的最小加权边 计算我从上面计算的最小加权边的最大值。

  • 我要做什么::我想使用我当前的实现为圆形图像添加一个黑色边框,如何在不使用第三方库的情况下实现这一点 全面转变。JAVA

  • 我一直试图得到一个条形图,每个条形图上都有值标签。我找遍了,但还是找不到。我的df如下所示。 到目前为止,我的代码是