Библиотека графов Guava ElementOrder на краях вместо узлов
У меня есть эта простая структура Graph с использованием библиотеки Guava Graph, и я хотел бы лучше понять, можно ли отсортироватьadjacents/edges
(не node
приказ). Для пояснения:
import com.google.common.graph.ElementOrder;
import com.google.common.graph.GraphBuilder;
import com.google.common.graph.MutableGraph;
public class MyNodeTest {
public static void main(String[] args) {
MutableGraph<String> graph = GraphBuilder.undirected().nodeOrder(ElementOrder.insertion()).build();
graph.addNode("A");
graph.addNode("C");
graph.addNode("D");
graph.addNode("B");
graph.addNode("E");
graph.putEdge("A", "B");
graph.putEdge("A", "C");
graph.putEdge("A", "D");
graph.putEdge("A", "E");
System.out.println("My default Insertion.order Nodes: " + graph.nodes());
System.out.println("Adj. Order that I couldn't understand: " + graph.adjacentNodes("A"));
System.out.println("Successor. Order that I couldn't understand: " + graph.successors("A"));
System.out.println("Pred. Order that I couldn't understand: " + graph.predecessors("A"));
}
}
Мой результат:
My default Insertion.order Nodes: [A, C, D, B, E]
Adj. Order that I couldn't understand: [D, E, B, C]
Successor. Order that I couldn't understand: [D, E, B, C]
Pred. Order that I couldn't understand: [D, E, B, C]
Без лишних слов я имею в виду следующее:
С помощью .nodeOrder(ElementOrder.insertion())
есть возможность сортировать сами узлы. Тем не менее, меня больше интересует сортировкаedges
связанный с данным node
таким образом, что если бы я использовал putEdge
соответственно от A
с B, C, D, E
результат именно такой, а не показанный выше.
Любое понимание?
Заранее спасибо.
1 ответ
Если кто-то сталкивается с тем же вопросом, вот как я его решил (отказ от ответственности: не оптимальное, но рабочее решение).
MutableNetwork<String, UUID> graph = NetworkBuilder.undirected().edgeOrder(ElementOrder.insertion()).build();
graph.addNode("A");
graph.addNode("C");
graph.addNode("D");
graph.addNode("B");
graph.addNode("E");
graph.addEdge("A", "B", UUID.randomUUID());
graph.addEdge("A", "C", UUID.randomUUID());
graph.addEdge("A", "D", UUID.randomUUID());
graph.addEdge("A", "E", UUID.randomUUID());
System.out.println("My default Insertion.order Nodes: " + graph.nodes());
System.out.println("Adj. Order that I couldn't understand: " + graph.adjacentNodes("A"));
System.out.println("Successor. Order that I couldn't understand: " + graph.successors("A"));
System.out.println("Pred. Order that I couldn't understand: " + graph.predecessors("A"));
И результаты:
My default Insertion.order Nodes: [A, C, D, B, E]
Adj. Order that I couldn't understand: [B, C, D, E]
Successor. Order that I couldn't understand: [B, C, D, E]
Pred. Order that I couldn't understand: [B, C, D, E]
В MutableNetwork
имеет .edgeOrder(ElementOrder.insertion())
это делает трюк. Минусы здесь связаны сK,V
необходимо для создания этой структуры данных.
С уважением