- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
除了我正在使用的 JGraphT (Java) 库之外,我还是图论新手,以便实现我正在尝试解决的物流问题的解决方案。因此,我对解决这个问题的最佳方法有点迷失,我必须在给定传入数据的情况下表示 cargo 从 A 点到 C 点的路径。
给定一个输送段或有序对的列表,我如何以编程方式用尽可能少的边来表示它?
Delivery 1
从亚特兰大发往孟买。
Delivery 2
从亚特兰大发往伦敦。
Delivery 3
从伦敦发往孟买。
在我的可视化图形表示中,我想删除显式的亚特兰大到孟买
边缘,并简单地从其他边缘推断出该边缘并将其简单地表示为:
亚特兰大 -> 伦敦 -> 孟买
我觉得可能有一种现有的路径算法可以用来解决这个相当简单的用例,但考虑到我对这个主题的相对陌生,我正在努力找出哪一个。如果我的要求是删除过多的顶点而不是边缘,那么似乎 ShortestPathAlgorithm
在这里会有用。
我可能可以确定给定对的最终源
和汇
(即亚特兰大是源,孟买是汇),但不想下降如果可能的话,手动去除边缘的路径。
当前代表:
所需的代表:
我创建了一个类,让我接近实现下面提到的替代深度优先解决方案@JorisKinable,但仍然不明白为什么“亚特兰大、孟买和伦敦”按该顺序列出。如果没有对边缘施加权重,在这种情况下是什么导致孟买领先于伦敦?
public final class Demo {
public static void main(String[] args) throws Exception {
// Create the graph object
Graph<String, DefaultEdge> graph = new DefaultDirectedGraph<>(DefaultEdge.class);
String atlanta = "Atlanta";
String london = "London";
String mumbai = "Mumbai";
graph.addVertex(atlanta);
graph.addVertex(london);
graph.addVertex(mumbai);
graph.addEdge(atlanta, london);
graph.addEdge(london, mumbai);
graph.addEdge(atlanta, mumbai);
ComponentNameProvider<String> vertexIdProvider = name -> name;
ComponentNameProvider<String> vertexLabelProvider = name -> name;
String start = graph.vertexSet().stream().filter(r -> r.equals("Atlanta")).findAny().get();
System.out.println("-- traverseGraph output");
traverseGraph(graph, start);
GraphExporter<String, DefaultEdge> exporter = new DOTExporter<>(vertexIdProvider, vertexLabelProvider, null);
Writer writer = new StringWriter();
exporter.exportGraph(graph, writer);
System.out.println(writer.toString());
}
private static void traverseGraph(Graph<String, DefaultEdge> graph, String start) {
Iterator<String> iterator = new DepthFirstIterator<>(graph, start);
while (iterator.hasNext()) {
String string = iterator.next();
System.out.println(string);
}
}
}
最佳答案
目前问题表述不够精确,无法给出准确答案。不过,您似乎可以通过以下步骤解决您的问题:
所有这些都可以在 JGraphT 中轻松完成,但这是一个单独的问题。
关于java - JGraphT:如何尽可能有效地表示一组顶点和边,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57184523/
在 jgrapht 中,我添加了一些顶点。 我想知道如何获取我已添加或已存在于 jgrapht 中的所有顶点? 有办法得到吗? 最佳答案 这将给出图中的所有顶点。 DefaultDirectedGra
在 jgrapht 中,我添加了一些顶点。 我想知道如何获取我已添加或已存在于 jgrapht 中的所有顶点? 有办法得到吗? 最佳答案 这将给出图中的所有顶点。 DefaultDirectedGra
我正在 jgrapht 中寻找一个允许我构建图表的类动态地并在运行时在给定图中生成新边 基于算法分支的时间。 我需要实现分支定界算法 我看到这个类ListenableDirectedWeightedG
方法 getSource()和 getTarget() org.jgrapht.graph.DefaultEdge 上的 DefaultEdge 受到保护。 我应该如何访问 edgeSet() 返回的
SimpleWeightedGraph g = new SimpleWeightedGraph<>(DefaultWeightedEdge.class); String v1 = "v1";
我正在构建一个关于图论算法的项目,为此我使用 JGraphT .我已经完全构建了我的图表,并且在过去的几个月里我一直在研究它。现在我想导出它,以便在 Gephi 中可视化它。我不想使用 JGraph
我有一个问题,本质上可以看作是一个图表。我正在考虑使用 JGraphT 来实现它,而不是自己动手。使用 JGraphT 从图中获取最小生成树的最佳方法是什么? 最佳答案 不幸的是,我不知道足够的图论来
除了我正在使用的 JGraphT (Java) 库之外,我还是图论新手,以便实现我正在尝试解决的物流问题的解决方案。因此,我对解决这个问题的最佳方法有点迷失,我必须在给定传入数据的情况下表示 carg
假设我有以下两个树形图: a i / \ / \ b
我正在使用SimpleDirectedWeightedGraph来自JGrapghT 1.2.0图书馆。我的目标是在顶点 A 之间创建两条边和B这样A B 。如果我这样做: graph.addEdg
我正在尝试遍历所有节点,因此我可以将它们打印出来用于 graphviz。使用 JGraphT 库执行此操作的最佳方法是什么? public static void main(String[] args
我有制作无向图的代码: UndirectedGraph g = new SimpleGraph(DefaultEdge.class); g.addVertex("1"); g.addVertex("2
我使用以下方法创建了一个有向图: public static DirectedGraph directedGraph = new DefaultDirectedGraph(DefaultEdg
以下是使用 Dijkstra 算法查找最短路径的示例代码: public static void main(String args[]) { SimpleDirectedWeightedGra
我使用 JGraphT 构建了以下图表 A->B graph = new DirectedPseudograph<>(Edge.class); DijkstraShortestPath sho
我有一个简单的无向图 G = (V, E)。给定一个节点 n,是否有一种简单的方法可以找到它的所有邻居,即所有节点 m,使得 {n, m} 在 E? 有 edgesOf 方法,它返回连接到给定节点的所
我想使用 JGraphT 库制作图形。我的代码如下: private UndirectedGraph graph; private HashMap vertixList; public MapGra
希望你一切顺利!我正在尝试编写一个程序,在该程序中我需要创建一个动态加权图并获得从一个顶点到另一个顶点的最短路径。但运行程序后我得到这个异常: run: TEST1 TEST Vertex Add E
我看到了 jgraph 和 jgrapht 的示例,很容易理解,但现在确定我将如何使用 CompleteBipartiteGraph?如何使用语法来实例化图表? http://jgrapht.org/
JGraphT有许多最短路径的实现(Dijkstra、Belman Ford 等) 我需要一个未加权图的单源最短路径。 这是我的问题(特定于 JGraphT): 首先,我假设对未加权的图使用 Dijk
我是一名优秀的程序员,十分优秀!