JGraphT 导出加权图并导入它
JGraphT exporting a weighted graph And importing it
我正在寻找一种方法来导出带有加权边的图形。
我有一个带有加权边的简单有向图。
SimpleDirectedWeightedGraph<Integer, DefaultWeightedEdge> exGraph =
new SimpleDirectedWeightedGraph<>(vSupplier, SupplierUtil.createDefaultWeightedEdgeSupplier());
这是我的图表。我为它生成一些顶点和边。
我试过点导出器:
DOTExporter<Integer, DefaultWeightedEdge> dotExporter = new DOTExporter<>();
Writer writer = new StringWriter();
dotExporter.exportGraph(exGraph,writer);
FileWriter fw = new FileWriter("ex2.dot");
fw.write(writer.toString());
fw.close();
但是我无法导出权重。
有人可以告诉我如何先导出再导入吗?
谢谢!
不同的图形格式以不同的方式支持边权重。就个人而言,我发现 DIMACS 图形格式是导出加权图形最简单的格式。这种图形格式只是将图形写入文件:
<edge_source> <edge_target> <edge_weight>
下面是一个使用 DIMACS export/import 加权图的完整示例:
Graph<Integer, DefaultWeightedEdge> graph=new SimpleWeightedGraph<>(DefaultWeightedEdge.class);
Graphs.addAllVertices(graph,Arrays.asList(1,2,3,4));
Graphs.addEdge(graph,1,2, 10);
Graphs.addEdge(graph,2,3, 11);
Graphs.addEdge(graph,3,4, 12);
Graphs.addEdge(graph,4,1, 13);
//Example of exporting a weighted graph in DIMACS format
DIMACSExporter<Integer, DefaultWeightedEdge> dimacsExporter=new DIMACSExporter<>();
//Enable exporting of weights in the DIMACS exporter
dimacsExporter.setParameter(DIMACSExporter.Parameter.EXPORT_EDGE_WEIGHTS, true);
//Export the graph
dimacsExporter.exportGraph(graph, new File("DIMACSgraph.txt"));
//Now import the graph
Graph<Integer, DefaultWeightedEdge> importGraph = new SimpleWeightedGraph<>(SupplierUtil.createIntegerSupplier(), SupplierUtil.createDefaultWeightedEdgeSupplier());
DIMACSImporter<Integer, DefaultWeightedEdge> dimacsImporter=new DIMACSImporter<>();
dimacsImporter.importGraph(importGraph, new File("DIMACSgraph.txt"));
System.out.println("Imported DIMACS graph: "+importGraph);
System.out.println("Edge weights: ");
for(DefaultWeightedEdge edge : importGraph.edgeSet())
System.out.println("Edge: "+edge+" weight: "+importGraph.getEdgeWeight(edge));
导出期间创建的文件包含以下内容:
c
c SOURCE: Generated using the JGraphT library
c
p edge 4 4
e 1 2 10.0
e 2 3 11.0
e 3 4 12.0
e 4 1 13.0
以上代码的输出:
Imported DIMACS graph: ([0, 1, 2, 3], [{0,1}, {1,2}, {2,3}, {3,0}])
Edge weights:
Edge: (0 : 1) weight: 10.0
Edge: (1 : 2) weight: 11.0
Edge: (2 : 3) weight: 12.0
Edge: (3 : 0) weight: 13.0
显然,要导入 weighted graph
,您要导入的图形必须是加权类型,即 graph.getType().isWeighted()
必须 return 为真。
您也可以像原来那样使用 DOT 文件格式。使用这种格式,您必须将边权重导出为边 属性 。有关详细信息,请参阅他们的 DOT file format documentation。
我正在寻找一种方法来导出带有加权边的图形。
我有一个带有加权边的简单有向图。
SimpleDirectedWeightedGraph<Integer, DefaultWeightedEdge> exGraph =
new SimpleDirectedWeightedGraph<>(vSupplier, SupplierUtil.createDefaultWeightedEdgeSupplier());
这是我的图表。我为它生成一些顶点和边。
我试过点导出器:
DOTExporter<Integer, DefaultWeightedEdge> dotExporter = new DOTExporter<>();
Writer writer = new StringWriter();
dotExporter.exportGraph(exGraph,writer);
FileWriter fw = new FileWriter("ex2.dot");
fw.write(writer.toString());
fw.close();
但是我无法导出权重。
有人可以告诉我如何先导出再导入吗?
谢谢!
不同的图形格式以不同的方式支持边权重。就个人而言,我发现 DIMACS 图形格式是导出加权图形最简单的格式。这种图形格式只是将图形写入文件:
<edge_source> <edge_target> <edge_weight>
下面是一个使用 DIMACS export/import 加权图的完整示例:
Graph<Integer, DefaultWeightedEdge> graph=new SimpleWeightedGraph<>(DefaultWeightedEdge.class);
Graphs.addAllVertices(graph,Arrays.asList(1,2,3,4));
Graphs.addEdge(graph,1,2, 10);
Graphs.addEdge(graph,2,3, 11);
Graphs.addEdge(graph,3,4, 12);
Graphs.addEdge(graph,4,1, 13);
//Example of exporting a weighted graph in DIMACS format
DIMACSExporter<Integer, DefaultWeightedEdge> dimacsExporter=new DIMACSExporter<>();
//Enable exporting of weights in the DIMACS exporter
dimacsExporter.setParameter(DIMACSExporter.Parameter.EXPORT_EDGE_WEIGHTS, true);
//Export the graph
dimacsExporter.exportGraph(graph, new File("DIMACSgraph.txt"));
//Now import the graph
Graph<Integer, DefaultWeightedEdge> importGraph = new SimpleWeightedGraph<>(SupplierUtil.createIntegerSupplier(), SupplierUtil.createDefaultWeightedEdgeSupplier());
DIMACSImporter<Integer, DefaultWeightedEdge> dimacsImporter=new DIMACSImporter<>();
dimacsImporter.importGraph(importGraph, new File("DIMACSgraph.txt"));
System.out.println("Imported DIMACS graph: "+importGraph);
System.out.println("Edge weights: ");
for(DefaultWeightedEdge edge : importGraph.edgeSet())
System.out.println("Edge: "+edge+" weight: "+importGraph.getEdgeWeight(edge));
导出期间创建的文件包含以下内容:
c
c SOURCE: Generated using the JGraphT library
c
p edge 4 4
e 1 2 10.0
e 2 3 11.0
e 3 4 12.0
e 4 1 13.0
以上代码的输出:
Imported DIMACS graph: ([0, 1, 2, 3], [{0,1}, {1,2}, {2,3}, {3,0}])
Edge weights:
Edge: (0 : 1) weight: 10.0
Edge: (1 : 2) weight: 11.0
Edge: (2 : 3) weight: 12.0
Edge: (3 : 0) weight: 13.0
显然,要导入 weighted graph
,您要导入的图形必须是加权类型,即 graph.getType().isWeighted()
必须 return 为真。
您也可以像原来那样使用 DOT 文件格式。使用这种格式,您必须将边权重导出为边 属性 。有关详细信息,请参阅他们的 DOT file format documentation。