diff --git a/Algoritmi_2/Laboratorio/Lab2/out/production/Lab2/BFS.class b/Algoritmi_2/Laboratorio/Lab2/out/production/Lab2/BFS.class index 041e207f9977a33c57a19c4ac323e3e47dc23d2a..67cbb26ec9b958a1820c0acbcb642b8ac0673edd 100644 Binary files a/Algoritmi_2/Laboratorio/Lab2/out/production/Lab2/BFS.class and b/Algoritmi_2/Laboratorio/Lab2/out/production/Lab2/BFS.class differ diff --git a/Algoritmi_2/Laboratorio/Lab2/out/production/Lab2/Main.class b/Algoritmi_2/Laboratorio/Lab2/out/production/Lab2/Main.class index bf9286671bb03c9fefd0e19a3864335107bfa92c..5e26f2131cf76a898d2078414f54b1b3e7357322 100644 Binary files a/Algoritmi_2/Laboratorio/Lab2/out/production/Lab2/Main.class and b/Algoritmi_2/Laboratorio/Lab2/out/production/Lab2/Main.class differ diff --git a/Algoritmi_2/Laboratorio/Lab2/src/BFS.java b/Algoritmi_2/Laboratorio/Lab2/src/BFS.java index e42eb55674a9050ada95117465d58ee27ed87546..82eb4e908d389ca0284206f67c25dea2a5d87b61 100644 --- a/Algoritmi_2/Laboratorio/Lab2/src/BFS.java +++ b/Algoritmi_2/Laboratorio/Lab2/src/BFS.java @@ -159,27 +159,31 @@ public class BFS { return alberoBFSdallaSorgente; } - private void cammminoMinimoImpl(DirectedGraph bfsAlbero, int sorg, int dest, ArrayList<Integer> path, ArrayList<Boolean> founded) { + private void cammminoMinimoImpl(DirectedGraph bfsAlbero, int sorg, int dest, ArrayList<Integer> path, boolean[] founded) { //Se ho trovato il nodo if (sorg == dest) { - founded.add(true); + founded[0] = true; return; } //Se sono nella foglia sbagliata + /* if (((Collection<?>) bfsAlbero.getNeighbors(sorg)).isEmpty()) { //Pulisco il percorso corrente perché errato path.clear(); } + */ + //Allora devo ancora esplorare for (Integer node : bfsAlbero.getNeighbors(sorg)) { path.add(node); - System.out.println(">>> Nodo: " + node); cammminoMinimoImpl(bfsAlbero, node, dest, path, founded); - if (founded.contains(true)) { + if (founded[0]) { break; + } else { + path.removeLast(); } } } @@ -189,16 +193,20 @@ public class BFS { //L'idea è quella di usare il BFS Albero, perché aciclico, ed in questo modo trovare il percorso. //Provo con la ricorsione - //Implementazione sbagliata, ma l'idea credo sia giusta + + if (sorgente == destinazione) { + return null; + } DirectedGraph bfsAlbero = bfsTreeDirected(sorgente); ArrayList<Integer> returnArray = new ArrayList<>(); - ArrayList<Boolean> founded = new ArrayList<>(); + boolean[] founded = new boolean[1]; - System.out.println(bfsAlbero); cammminoMinimoImpl(bfsAlbero, sorgente, destinazione, returnArray, founded); - returnArray.addFirst(sorgente); + if (!returnArray.isEmpty()) { + returnArray.addFirst(sorgente); + } return returnArray; } } diff --git a/Algoritmi_2/Laboratorio/Lab2/src/Main.java b/Algoritmi_2/Laboratorio/Lab2/src/Main.java index 5b21021c85bc1763564ab38949e46e1bb1cec5cb..cf2b97b5981a372c5cd7bd9b6d803ac457987e93 100644 --- a/Algoritmi_2/Laboratorio/Lab2/src/Main.java +++ b/Algoritmi_2/Laboratorio/Lab2/src/Main.java @@ -5,10 +5,10 @@ import java.util.Arrays; public class Main { public static void main(String[] args) { - Graph mioGrafo = new UndirectedGraph("10; 0 1; 1 2; 1 5; 1 4; 2 4; 2 3; 2 4; 3 9; 5 7; 7 6"); //Num Nodi + Archi + Graph mioGrafo = new UndirectedGraph("10; 0 1; 1 2; 2 3; 3 4; 4 5; 5 6; 6 7; 7 8; 8 9; 9 0; 0 2; 2 4; 4 6; 6 8; 8 0;"); //Num Nodi + Archi BFS mioBFS = new BFS(mioGrafo); int source = 0; - int destination = 6; + int destination = 4; System.out.println(">>> Sorgente delle Operazione: " + source); System.out.println(">>> Destinazione delle Operazione: " + destination);