From: Szabolcs B. <bes...@gm...> - 2014-03-19 21:29:18
|
Hi! The problem here is that DirectedMultigraph doest not allow loops and in your first loop you are trying to do > graph.addEdge(people.get(0), person, new > RelationshipEdge<String>(people.get(0), person, friend)); > which translates to > graph.addEdge("John", "John", new RelationshipEdge<String>("John", "John", > friend)); on the first iteration. > Your option here is to either use a DefaultDirectedGraph (a non-simple directed graph in which multiple edges between any two vertices are *not*permitted, but loops are) or rewrite your code so that it does not try to friend John with "himself". 2014-03-15 16:18 GMT+01:00 Patricia_Sim <pt...@gm...>: > 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 > |