Как я могу создать несколько ребер с одинаковым весом и одной и той же исходной вершиной? - PullRequest
0 голосов
/ 03 мая 2019

Я использую jgrapht, и у меня возникла проблема здесь. Как только я создаю два ребра с одинаковым весом из одной исходной вершины, у меня получается только одно ребро:

DirectedWeightedPseudograph<Object, Object> Grph1 = new DirectedWeightedPseudograph<>(Object.class);

    Grph1.addVertex("a");
    Grph1.addVertex("b");
    Grph1.addVertex("c");

    Grph1.addEdge("a", "b", "55");
    Grph1.addEdge("a", "c", "55");

Я ожидаю выхода:

a--55-->b
a--55-->c

Но фактический вывод:

a--55-->b
c

Ответы [ 2 ]

1 голос
/ 06 мая 2019

Вы не создаете два ребра. Вы создаете только один край, и этот край равен "55". Справа: строка "55" является ребром в вашем примере.

Чтобы создать несколько ребер с реальными весами (рассчитанный на каламбур), вы должны объявить, что ваш график имеет правильный тип, а именно тот, который использует, например, DefaultWeightedEdge в качестве типа ребра.

Затем, когда вы добавляете новое ребро, вызывая addEdge, вы получаете экземпляр DefaultWeightedEdge. Используя этот экземпляр, вы можете присвоить weight этому ребру, вызвав setEdgeWeight.

Graph<String, DefaultWeightedEdge> g = new DirectedWeightedPseudograph<>(DefaultWeightedEdge.class);
g.addVertex("a");
g.addVertex("b");
g.addVertex("c");

DefaultWeightedEdge e0 = g.addEdge("a", "b");
g.setEdgeWeight(e0, 55.0);

DefaultWeightedEdge e1 = g.addEdge("a", "c");
g.setEdgeWeight(e1, 55.0);

System.out.println(g.edgeSet());
0 голосов
/ 06 мая 2019

Из документации:

добавляет указанное ребро e к этому графику, если этот граф не содержит ребро e2, такое что e2.equals (e)

Object o1=Grph1.addEdge("a", "b", "55");
Object o2=Grph1.addEdge("a", "c", "55");
boolean test=o1.equals(o2); //this will return true

Вместо создания графика с <Object,Object> используйте что-то другое, например, <String,DefaultWeightedEdge> как сделано в примерах:

Graph<String,DefaultWeightedEdge> g=new DirectedWeightedPseudograph<>(DefaultWeightedEdge.class);
g.addVertex("a");
g.addVertex("b");
g.addVertex("c");

g.addEdge("a", "b", "55");
g.addEdge("a", "c", "55");
...