我有一种产生副作用的方法,即使标记了某些变量final.为什么是这样?也许我对这是什么感到困惑final.
@Test
public void testSubGraph() {
WeightedGraph<String, DefaultWeightedEdge> g = generateSimpleCaseGraph();
Graph<String, DefaultWeightedEdge> sub = ChooseRoot.subgraphInDirection(g, "alpha", "l");
assertEquals(g, generateSimpleCaseGraph()); //fails
}
public static <V, E extends DefaultEdge> Graph<V, E> subgraphInDirection(final Graph<V, E> g, final V start, final V sink) {
Graph<V, E> sub = removeEdges(g, start, sink);
return removeUnconnectedNodes(sub, start);
}
private static <Vertex, Edge extends DefaultEdge> Graph<Vertex, Edge> removeEdges(final Graph<Vertex, Edge> g, Vertex start, Vertex sink) {
final Set<Edge> outEdges = new HashSet<Edge>(g.edgesOf(start));
boolean …Run Code Online (Sandbox Code Playgroud) 是否可以通过使用循环将边添加到图形中?我正在解析一个String来确定合适的边和标签.由于某种原因,它只会为用于遍历String的while循环的第一轮添加边.对于所有其他人,出现以下消息...
警告:删除了边缘,因为底层JGraphT图表拒绝创建它.当违反基础图的约束时,例如,尝试将并行边或自循环添加到禁止它们的图中,就会发生这种情况.要避免此消息,请确保使用合适的基础JGraphT图.
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
import org.jgraph.*;
import org.jgraph.graph.*;
import org.jgrapht.*;
import org.jgrapht.ext.*;
import org.jgrapht.graph.*;
// resolve ambiguity
import org.jgrapht.graph.DefaultEdge;
public class JGraphAdapterDemo
extends JApplet
{
private static final long serialVersionUID = 3256444702936019250L;
private static final Color DEFAULT_BG_COLOR = Color.decode("#FAFBFF");
private static final Dimension DEFAULT_SIZE = new Dimension(530, 320);
static ListenableGraph<String, String> g =
new ListenableDirectedMultigraph<String, String>(String.class);
static int [] finalStates = new int[10];
static int startState = 0;
static char tran = ' ';
static int …Run Code Online (Sandbox Code Playgroud) 我正在研究一个涉及通过Hobbs算法进行回指解析的项目.我使用Stanford解析器解析了我的文本,现在我想操纵节点以实现我的算法.
目前,我不明白如何:
基于其POS标签访问节点(例如,我需要以代词开头 - 我如何得到所有代词?).
使用访客.我有点像Java的菜鸟,但是在C++中我需要实现一个Visitor仿函数然后处理它的钩子.我找不到Stanford Parser的Tree结构.那是jgrapht吗?如果是的话,你可以在代码片段中提供一些指示吗?
为什么我得到这个程序的NULL指针错误,只要我看到一切看起来很好,我刚刚开始使用JGraphT并需要一些帮助.
背景:我需要能够向图表添加航班,每个航班都是双向的,航班应按其价格加权.
错误:
run:
Please enter the number of flights:
2
Please enter the flight destination for flight 1:
Edinburg
Please enter the flight destination for flight 2:
Heathrow
Enter the edges
Edinburg
Heathrow
Please enter a price for this edge:
25.99
Exception in thread "main" java.lang.NullPointerException
at org.jgrapht.graph.AbstractBaseGraph.setEdgeWeight(Unknown Source)
at graphapp.MyGraph.setEdgeWeight(MyGraph.java:25)
at graphapp.GraphApp.main(GraphApp.java:33)
Java Result: 1
BUILD SUCCESSFUL (total time: 14 seconds)
Run Code Online (Sandbox Code Playgroud)
MyGraph.java(类):
package graphapp;
import org.jgrapht.*;
import org.jgrapht.graph.*;
import org.jgrapht.alg.KruskalMinimumSpanningTree;
public class MyGraph {
private final SimpleDirectedWeightedGraph<String, DefaultWeightedEdge> …Run Code Online (Sandbox Code Playgroud) 我使用 JGraphT 构建了以下图 A->B<-C,如下所示:
DirectedPseudograph<Node, Edge> graph = new DirectedPseudograph<>(Edge.class);
DijkstraShortestPath<Node, Edge> shortestPath = new DijkstraShortestPath<Node, Edge>(graph);
Node bn1 = new Node("1", "A", null);
Node bn2 = new Node("2", "B", null);
Node bn3 = new Node("3", "C", null);
graph.addVertex(bn1);
graph.addVertex(bn2);
graph.addVertex(bn3);
Edge edge1 = new Edge("PART_OF");
Edge edge2 = new Edge("IS_A");
graph.addEdge(bn1, bn2, edge1);
graph.addEdge(bn3, bn2, edge2);
Run Code Online (Sandbox Code Playgroud)
但每当我尝试打电话时:
shortestPath.getPath(node1, node3);
Run Code Online (Sandbox Code Playgroud)
我得到一个空数组,这意味着没有连接。我知道这可能与边缘的方向有关,因为 A->B->C 工作正常。有没有办法无论A和C之间的边的方向如何都能找到路径?
尝试运行 JGraphT hello world示例,这里的POM如下所示:
<groupId>org.jgrapht</groupId>
<artifactId>jgrapht-core</artifactId>
<version>1.4.0</version>
Run Code Online (Sandbox Code Playgroud)
但这似乎并没有拉下 org.jgrapht.nio.* ,文件树如下:
我需要在 POM 中做什么才能成功完成这些操作:
import org.jgrapht.nio.*;
import org.jgrapht.nio.dot.DOTExporter;
Run Code Online (Sandbox Code Playgroud)
谢谢
我有一个基本上可以被视为图表的问题.我正在考虑使用JGraphT来实现它,而不是自己动手.使用JGraphT从图形中获取最小生成树的最佳方法是什么?
我正在构建一个关于图论算法的项目,为此我使用了JGraphT.我完全构建了我的图表,并在过去的几个月中完成了它的工作.现在我想导出它,以便我可以在Gephi中将其可视化.我不想使用JGraph和Java可视化,因为我已经有足够的代码,我想保持简单.我想使用JgraphT的DOTExporter类.我已达到一个点,我导出精细顶点和边,但没有边缘权重.
所以这是我的导出功能.我不知道如何实现ComponentAttributeProvider接口,无法找到解决这个问题的方法.
任何想法我应该放而不是null,null?
static public void exportGraph(){
StringNameProvider<CustomVertex> p1=new StringNameProvider<CustomVertex>();
IntegerNameProvider<CustomVertex> p2=new IntegerNameProvider<CustomVertex>();
StringEdgeNameProvider<CustomWeightedEdge> p3 = new StringEdgeNameProvider<CustomWeightedEdge>();
DOTExporter export=new DOTExporter(p2, p1, p3, null, null);
try {
export.export(new FileWriter("graph.dot"), g);
}catch (IOException e){}
}
Run Code Online (Sandbox Code Playgroud)
我做过这样的事情
ComponentAttributeProvider<CustomWeightedEdge> edgeAttributeProvider =
new ComponentAttributeProvider<CustomWeightedEdge>() {
public Map<String, String> getComponentAttributes(CustomWeightedEdge e) {
Map<String, String> map =new LinkedHashMap<String, String>();
map.put("weight", Double.toString(g.getEdgeWeight(e)));
return map;
}
};
Run Code Online (Sandbox Code Playgroud) 我尝试在JGraphx中显示图表.只要我使用有向图形,一切都很好,但当我试图显示一个无向的图形时,它显示方向.
代码来自jgrapht的演示.
package org.jgrapht.demo;
import com.mxgraph.layout.*;
import com.mxgraph.swing.*;
import java.awt.*;
import java.nio.file.FileSystem;
import javax.swing.*;
import org.jgrapht.*;
import org.jgrapht.ext.*;
import org.jgrapht.graph.*;
/**
* A demo applet that shows how to use JGraphX to visualize JGraphT graphs.
* Applet based on JGraphAdapterDemo.
*
* @since July 9, 2013
*/
public class JGraphXAdapterDemo
extends JApplet
{
private static final long serialVersionUID = 2202072534703043194L;
private static final Dimension DEFAULT_SIZE = new Dimension(530, 320);
private JGraphXAdapter<String, DefaultEdge> jgxAdapter;
/**
* An alternative starting point for …Run Code Online (Sandbox Code Playgroud) 在 jgrapht 中,我添加了一些顶点。
我想知道如何获取我在 jgrapht 中添加或已经存在的所有顶点?
有没有办法得到它?