簡體   English   中英

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 導出/導入加權圖的完整示例:

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

上述代碼的output:

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()必須返回 true。

您也可以像原來一樣使用 DOT 文件格式。 使用這種格式,您必須將邊緣權重導出為邊緣屬性 有關詳細信息,請參閱他們的DOT 文件格式文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM