[jgrapht-users] edges of a graph
Brought to you by:
barak_naveh,
perfecthash
From: Hans-Martin A. <dr...@go...> - 2008-12-21 11:26:59
|
Hi, I am a newbie to JGraphT. What I want is to extract all connected subgraphs from a griven graph. Below is the code that I have used to familiarize myself with JGraphT. Two questions: 1. Why do I not get the desired edge sets from the given graph? 2. Wouldn't it be nice to include a subgraph extractor as a general functionality in the JGraphT package? Thanks. Hans-Martin Adorf /* * Demo.java */ import java.util.HashSet; import java.util.List; import java.util.Set; import org.jgraph.graph.DefaultEdge; import org.jgrapht.UndirectedGraph; import org.jgrapht.alg.ConnectivityInspector; import org.jgrapht.graph.SimpleGraph; /** * * @author Hans-Martin Adorf */ public class Demo { public static void main(String... args) { UndirectedGraph<String, DefaultEdge> g = new SimpleGraph<String, DefaultEdge>(DefaultEdge.class); String v1 = "v1"; String v2 = "v2"; String v3 = "v3"; String v4 = "v4"; // add the vertices g.addVertex(v1); g.addVertex(v2); g.addVertex(v3); g.addVertex(v4); // add edges g.addEdge(v1, v2); // g.addEdge(v2, v3); g.addEdge(v3, v4); // g.addEdge(v4, v1); System.out.println(g); // returns ([v1, v2, v3, v4], [null={v1,v2}, null={v3,v4}]) System.out.println(g.edgeSet()); // returns [null, null] System.out.println(g.edgesOf(v1)); // returns [null] ConnectivityInspector connectivityInspector = new ConnectivityInspector(g); System.out.println(connectivityInspector.isGraphConnected()); List<Set<String>> connectedSets = connectivityInspector.connectedSets(); System.out.println(connectedSets); System.out.println(extractConnectedGraphs(g, connectedSets)); } public static Set<UndirectedGraph<String, DefaultEdge>> extractConnectedGraphs( UndirectedGraph<String, DefaultEdge> sourceGraph, List<Set<String>> connectedVertexList) { Set<UndirectedGraph<String, DefaultEdge>> result = new HashSet<UndirectedGraph<String, DefaultEdge>>(); for (Set<String> connectedVertices : connectedVertexList) { result.add(extractConnectedGraph(sourceGraph, connectedVertices)); } return result; } public static UndirectedGraph<String, DefaultEdge> extractConnectedGraph( UndirectedGraph<String, DefaultEdge> sourceGraph, Set<String> connectedVertices) { UndirectedGraph<String, DefaultEdge> targetGraph = new SimpleGraph<String, DefaultEdge>(DefaultEdge.class); for (String vertex : connectedVertices) { addEdges(sourceGraph, vertex, targetGraph); } return targetGraph; } public static UndirectedGraph<String, DefaultEdge> addEdges( UndirectedGraph<String, DefaultEdge> sourceGraph, String vertex, UndirectedGraph<String, DefaultEdge> targetGraph) { targetGraph.addVertex(vertex); System.out.println(sourceGraph.edgesOf(vertex)); for (DefaultEdge edge : sourceGraph.edgesOf(vertex)) { targetGraph.addEdge((String) edge.getSource(), (String) edge.getTarget()); } return targetGraph; } } |