打印图形顶点和边缘源/目标 - JGraphT

时间:2015-11-18 00:55:56

标签: java graph edge vertex

我正在创建用户的航班图表 我希望能够打印出我的图表,如:

Edinburgh <-> Heathrow
Heathrow <-> Amsterdam
etc....

我有一个想法是通过获取边缘源和边缘目标来实现这一点,边缘是“&lt; - &gt;” ,来源是例如“爱丁堡”,目标是“希思罗机场”。

我已经尝试循环遍历String数组并打印,例如graph.getEdge(sourceVertext,targetVertex),但我似乎无法让它工作。

我只会在代码中使用几个例子。

注意:如果我在设置边缘权重后尝试打印数组,则会出现非法参数异常。如果有人能解释为什么会发生这种情况也会很棒:)谢谢。

public static void main(String[] args) {

    SimpleDirectedWeightedGraph<String, DefaultWeightedEdge> airport = new SimpleDirectedWeightedGraph<String, DefaultWeightedEdge>(
            DefaultWeightedEdge.class);

    String[] array = { "Edinburgh", "Heathrow", "Amsterdam" };

    System.out.println(" ");
    System.out.println("The following destinations are used: " + "\n");

    for (String s : array) {
        System.out.println(s); // prints the array elements
    }

    System.out.print("");

    for (String s : array) {
        System.out.print(airport.getEdgeSource(s) + airport.getEdgeTarget(s));
        // OR....
        // System.out.print(airport.getEdge(sourceVertex, targetVertex));
    }

    DefaultWeightedEdge EH1 = airport.addEdge("Edinburgh", "Heathrow");
    DefaultWeightedEdge HE1 = airport.addEdge("Heathrow", "Edinburgh");
    airport.setEdgeWeight(EH1, 110);
    airport.setEdgeWeight(HE1, 110);

    DefaultWeightedEdge HA2 = airport.addEdge("Heathrow", "Amsterdam");
    DefaultWeightedEdge AH2 = airport.addEdge("Amsterdam", "Heathrow");
    airport.setEdgeWeight(HA2, 100);
    airport.setEdgeWeight(AH2, 100);

    System.out.println("");
}

1 个答案:

答案 0 :(得分:2)

我已经弄明白了如何显示边缘源和目标:

for(DefaultWeightedEdge e : airport.edgeSet()){
    System.out.println(airport.getEdgeSource(e) + " --> " + airport.getEdgeTarget(e));
}

然而,这显示它看起来像:

Edinburgh --> Heathrow
Heathrow --> Edinburgh

我如何对其进行格式化,以便我可以看起来像:

Edinburgh <-> Heathrow

此格式应告知用户航班是返程航班。

感谢您提供更多帮助。