Ciao a tutti, ho creato una classe SparseGraph che rappresenta un grafo orientato pesato.
Per farlo ho usato una HashMap fatta così:
codice:public HashMap<V,HashMap<V, E>> map = newHashMap<V,HashMap<V, E>>();
Nella classe ci sono i seguenti metodi (che funzionano):
codice:public E getData(V vertex1, V vertex2){ if(!hasVertex(vertex1)||!hasVertex(vertex2)) returnnull; else return map.get(vertex1).get(vertex2); } publicCollection<V> getVertices(){ return map.keySet(); } publicCollection<V> getNeighbors(V vertex){ if(!hasVertex(vertex)) returnnull; else return map.get(vertex).keySet(); }
Ora dovrei creare un metodo che mi permetta di stampare il grafico usando Graphviz. Quindi questo metodo deve ritornare una stringa come questa:
codice:digraph G { "v1"->"v2"[label ="2"]; "v2"->"v3"[label ="3"]; "v1"->"v3"[label ="1"]; "v2"->"v3"[label ="5"]; }
Dove "v_i" sono i vertici.
Il problema è che non so ciclare il grafo. Ho scritto questo codice ma non cicla su tutti i nodi e inoltre non so come risalire al peso degli archi.
codice:publicString print(){ String g ="digraph G {\n"; Collection<V> vertices = getVertices(); for(V v : vertices){ Collection<V> neighbors = getNeighbors(v); for(V n : neighbors){ g = g +"\t\""+ v +"\" -> \""+ n +"\" [label = \""+ v +"\"];\n"; } } g = g +"}\n"; return g; }
Qualcuno potrebbe aiutarmi?
Grazie mille![]()

Rispondi quotando