From: Joris K. <de...@gm...> - 2014-03-19 21:29:22
|
You are creating a self-loop which is not allowed in the type of graph you are using. This means that you are adding a directed edge from a vertex to itself. From the looks of it, your error is in this loop: for (String person : people) { graph.addVertex(person); graph.addEdge(people.get(0), person, new RelationshipEdge<String>(people.get(0), person, friend)); } You are iterating over all the persons in the list people. This list includes John. In the same loop you are also adding edges from John (people.get(0)) to all persons in the list people. As a conclusion you are adding a loop from John to itself. Simple solution: for(String person: people){ graph.addVertex(person); if(person != john){ graph.addEdge(... ); } } br, Joris On Sat, Mar 15, 2014 at 11:18 AM, Patricia_Sim <pt...@gm...> wrote: > Hi Everybody > > I'm trying to create directed graph with label edge by jgrapht. I learn how > to create by "LabeledEdges" example which source code shown below > > public class LabeledEdges { > private static final String friend = "friend"; > private static final String enemy = "enemy"; > > public static void main(String[] args) { > DirectedGraph<String, RelationshipEdge> graph = > new DirectedMultigraph<String, RelationshipEdge>( > new ClassBasedEdgeFactory<String, > RelationshipEdge>(RelationshipEdge.class)); > > ArrayList<String> people = new ArrayList<String>(); > people.add("John"); > people.add("James"); > people.add("Sarah"); > people.add("Jessica"); > > // John is everyone's friend > for (String person : people) { > graph.addVertex(person); > graph.addEdge(people.get(0), person, new > RelationshipEdge<String>(people.get(0), person, friend)); > } > > // Apparently James doesn't really like John > graph.addEdge("James", "John", new > RelationshipEdge<String>("James", > "John", enemy)); > > // Jessica is Sarah and James's friend > graph.addEdge("Jessica", "Sarah", new > RelationshipEdge<String>("Jessica", "Sarah", friend)); > graph.addEdge("Jessica", "James", new > RelationshipEdge<String>("Jessica", "James", friend)); > > // But Sarah doesn't really like James > graph.addEdge("Sarah", "James", new > RelationshipEdge<String>("Sarah", "James", enemy)); > > for (RelationshipEdge edge : graph.edgeSet()) { > if (edge.toString().equals("enemy")) { > System.out.printf(edge.getV1()+"is an enemy of "+ > edge.getV2()+"\n"); > } else if (edge.toString().equals("friend")) { > System.out.printf( edge.getV1()+" is a friend of "+ > edge.getV2()+"\n"); > } > } > } > > public static class RelationshipEdge<V> extends DefaultEdge { > private V v1; > private V v2; > private String label; > > public RelationshipEdge(V v1, V v2, String label) { > this.v1 = v1; > this.v2 = v2; > this.label = label; > } > > public V getV1() { > return v1; > } > > public V getV2() { > return v2; > } > > public String toString() { > return label; > } > } > > However, when I run this example, it show the error message > "Exception in thread "main" java.lang.IllegalArgumentException: > loops not allowed > at > org.jgrapht.graph.AbstractBaseGraph.addEdge(AbstractBaseGraph.java:243)" > > How can I do to run this example > > > > -- > View this message in context: > http://jgrapht-users.107614.n3.nabble.com/Label-Edge-Example-tp4024899.html > Sent from the jgrapht-users mailing list archive at Nabble.com. > > > ------------------------------------------------------------------------------ > Learn Graph Databases - Download FREE O'Reilly Book > "Graph Databases" is the definitive new guide to graph databases and their > applications. Written by three acclaimed leaders in the field, > this first edition is now available. Download your free book today! > http://p.sf.net/sfu/13534_NeoTech > _______________________________________________ > jgrapht-users mailing list > jgr...@li... > https://lists.sourceforge.net/lists/listinfo/jgrapht-users > |