ok, ho modificato il codice in questo modo, ma non fa quello che vorrei.
codice:
private List<LinkedList<Vertex<String>>> bfs(Graph<String,Integer> g,
LinkedList<Vertex<String>> visited,
List<LinkedList<Vertex<String>>> paths,
Vertex<String> destination) {
Collection<Vertex<String>> nodes = g.outVertices(visited.getLast());
// examine adjacent nodes
for (Vertex<String> node : nodes) {
if (visited.contains(node)) {
continue;
}
if (node.equals(destination)) {
visited.add(node);
//inserisce i vertici contenuti in visited nella lista dei percorsi
paths.add(visited);
System.out.println("Visited size: " + visited.size()); //stampa correttamente il numero di nodi nel percorso
visited.removeLast();
break;
}
}
//ricorsione per la BFS
for (Vertex<String> node : nodes) {
if (visited.contains(node) || node.equals(destination)) {
continue;
}
visited.addLast(node);
bfs(g, visited, paths, destination);
visited.removeLast();
}
return paths;
}
Quando vado a ciclare sul risltato lo faccio così
codice:
List<LinkedList<Vertex<String>>> paths = new GraphUtil().bfs(gra, visited, percorsi, e);
Iterator<LinkedList<Vertex<String>>> lli = paths.iterator();
if(paths.size() > 0) {
while(lli.hasNext()) {
LinkedList<Vertex<String>> path = lli.next();
Iterator<Vertex<String>> li = path.iterator();
Vertex<String> v1 = null;
Vertex<String> v2 = null;
int pesoTot = 0;
System.out.println("Path size: " + path.size()); //è sempre 1, ma non dovrebbe essere così
if(path.size() > 1) {
v1 = li.next();
while(li.hasNext()) {
v2 = li.next();
Edge<String,Integer> edge = gra.getEdge(v1,v2);
System.out.println("Da: " + v1.getElement().toString() + " - A: " + v2.getElement().toString() + " - Linea: " + edge.getLine() );
pesoTot += edge.getWeight();
v1 = v2;
}
System.out.println("Peso totale: " + pesoTot);
System.out.println("------------------------------------");
}
}
}
else {
System.out.println("nessun percorso");
}
In questa seconda parte di codice path.size() è sempre 1, quindi non vado mai nell'if che mi recupera l'arco tra i due nodi, invece dovrebbe corrispondere ad ogni ciclo alle variabili visited inserite in paths nel metodo bfs.
Quale è il problema?