我对图形很陌生,我试图用Java来解决这个问题:
给定一个具有N个节点和N个加权双向边的图,如果一个新的边'q‘允许减少图的总权重,则该算法必须响应是。
如果存在边'e‘,则边'q’满足这个条件,这样就可以将'e‘替换为'q’,使图保持连通并减少其整体权重。
我用邻接表实现了这个图:
public class Vertex {
private final int element;
private final Set<Edge> edges; // Collection of edges to neighbors
public Vertex(
我现在正在java中学习一个关于数据结构的类,我们将研究如何实现一个有向图类。
从顶部开始,我认为有一个具有值字段的链接列表类类和一个链接(自引用)字段数组,如下所示:
public class Digraph<T>
{
T vertex;
Digraph<T>[] edge;
public Digraph(T val, int maxDegree)
{
vertex = val;
edge = new Digraph<T>[ma
我在思考图形中的一个问题,这个问题的一部分如下所述:
我们有一个图G=(V,E),它的生成树T=(V,F ) (F是E的子集),对于G(在E上)中的每一个min割集,它将图划分为两个带有节点(U,U')的子图(每个子图都不需要连通)我们在F中检查这个割集的大小,它们的名称是G(U,U')和T(U,U'),我想找出:
ratio = max{T(U,U')/G(U,U')} for all possible U,U'
我认为这是NP难的,但我无法证明这一点。这里有一件很明显的事情,那就是如果我们在T中有一个顶点与G的次数相同,比率是1,它也是明显的
我目前正在为java编写一个编译器。JLS说“类层次结构必须是非循环的”。但是如果是这样的情况呢:
B extends A
C extends A
D extends B
D extends C
这是一个无环图,但无效,我如何检测这种情况?我目前使用的是BFS,每当我看到后缘时,我就知道有一个循环,但BFS算法无法检测到上面提到的情况。