Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Java - Grafo, Dijkstra, e contenuto di un nodo
Forum - Java - Grafo, Dijkstra, e contenuto di un nodo "RISOLTO"

Avatar
carmelolg (Normal User)
Rookie


Messaggi: 23
Iscritto: 14/12/2010

Segnala al moderatore
Postato alle 9:51
Giovedì, 10/11/2011
Ciao,
sto facendo un progetto dove vado ad utilizzare i grafi.
Ho trovato questa struttura dati gia implementata in Java
http://www.jgrapht.org/javadoc/

Potete trovare gli algloritmi a sinistra, tra i quali quello di dijkstra.

Ora ho un problema, creato un grafo con i nodi, ho trovato il cammino minimo con questo algoritmo, solo che quando uso la sua funzione getPath() per prendermi il contenuto dei nodi mi stampa null null, ma il cammino minimo lo calcola correttamente.
So che lo calcola correttamente perché mi faccio stampare la length del cammino minimo ed è corretta.

Vi passo il mio codice in modo tale da farvi capire meglio.


Codice sorgente - presumibilmente C#

  1. UndirectedGraph<String, DefaultEdge> g =
  2.             new SimpleGraph<String, DefaultEdge>(DefaultEdge.class);
  3.         ConnectivityInspector<String, DefaultEdge> a = new ConnectivityInspector<String, DefaultEdge>(g);
  4.  
  5.         String v1 = "v1";
  6.         String v2 = "v2";
  7.         String v3 = "v3";
  8.         String v4 = "v4";
  9.         String v5 = "v5";
  10.         String v6 = "v6";
  11.         // add the vertices
  12.         g.addVertex(v1);
  13.         g.addVertex(v2);
  14.         g.addVertex(v3);
  15.         g.addVertex(v4);
  16.         g.addVertex(v5);
  17.         g.addVertex(v6);
  18.  
  19.         // add edges to create a circuit
  20.         g.addEdge(v1, v2);
  21.         g.addEdge(v2, v5);
  22.         g.addEdge(v6, v5);
  23.         g.addEdge(v1, v4);
  24.         g.addEdge(v4, v6);
  25.         g.addEdge(v6, v5);
  26.  
  27.       DijkstraShortestPath<String, DefaultEdge> f = new DijkstraShortestPath<String, DefaultEdge>(g,v1,v5);
  28.      
  29.       List<DefaultEdge> list = f.getPathEdgeList();
  30. //qui metto in una lista i nodi del cammino minimo ma non va comunque
  31. //potrei usare anche getPath() ma è uguale solo che li stampa tutto il cammino
  32. //mentre con la lista devi scorrertela per farti stampare cio che c'è dentro.
  33.      
  34.       for (int i = 0; i < list.size(); i++) {
  35.           System.out.println(list.get(i)+" ");
  36.                                                                                 }
  37.      
  38.       System.out.println(f.getPath());




Ho risolto cambiando il tipo di arco che passavo, non vuole un DefaultEdge ma un  org.jgrapht.graph.DefaultEdge di jgrapht.
Grazie uguale, spero che questo problema sia utile per altri.

Ultima modifica effettuata da carmelolg il 10/11/2011 alle 11:08
PM