diff --git a/Algoritmi_2/Laboratorio/Lab2/out/production/Lab2/BFS.class b/Algoritmi_2/Laboratorio/Lab2/out/production/Lab2/BFS.class index 348d385d60ec99810e1b66d5c2b3eee9f53aa096..041e207f9977a33c57a19c4ac323e3e47dc23d2a 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 90720ff9e33207c51bb006f685d4752eb3ee7351..bf9286671bb03c9fefd0e19a3864335107bfa92c 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 0641c795c474497b740b151dcdec16d6cbb3f16e..e42eb55674a9050ada95117465d58ee27ed87546 100644 --- a/Algoritmi_2/Laboratorio/Lab2/src/BFS.java +++ b/Algoritmi_2/Laboratorio/Lab2/src/BFS.java @@ -159,14 +159,14 @@ public class BFS { return alberoBFSdallaSorgente; } - private void cammminoMinimoImpl(DirectedGraph bfsAlbero, int sorg, int dest, ArrayList<Integer> path) { + private void cammminoMinimoImpl(DirectedGraph bfsAlbero, int sorg, int dest, ArrayList<Integer> path, ArrayList<Boolean> founded) { //Se ho trovato il nodo if (sorg == dest) { + founded.add(true); return; } //Se sono nella foglia sbagliata - if (((Collection<?>) bfsAlbero.getNeighbors(sorg)).isEmpty()) { //Pulisco il percorso corrente perché errato path.clear(); @@ -176,32 +176,29 @@ public class BFS { //Allora devo ancora esplorare for (Integer node : bfsAlbero.getNeighbors(sorg)) { path.add(node); - //System.out.println(">>> Nodo: " + node); - cammminoMinimoImpl(bfsAlbero, node, dest, path); - if (node == dest) { + System.out.println(">>> Nodo: " + node); + cammminoMinimoImpl(bfsAlbero, node, dest, path, founded); + if (founded.contains(true)) { break; } } - } public ArrayList<Integer> camminoMinimo(int sorgente, int destinazione) { //L'idea è quella di usare il BFS Albero, perché aciclico, ed in questo modo trovare il percorso. - //Proviamo con la ricorsione - + //Provo con la ricorsione //Implementazione sbagliata, ma l'idea credo sia giusta DirectedGraph bfsAlbero = bfsTreeDirected(sorgente); - boolean[] founded = new boolean[this.myGraph.getOrder()]; ArrayList<Integer> returnArray = new ArrayList<>(); + ArrayList<Boolean> founded = new ArrayList<>(); System.out.println(bfsAlbero); - cammminoMinimoImpl(bfsAlbero, sorgente, destinazione, returnArray); - - + cammminoMinimoImpl(bfsAlbero, sorgente, destinazione, returnArray, founded); + returnArray.addFirst(sorgente); return returnArray; } } diff --git a/Algoritmi_2/Laboratorio/Lab2/src/Main.java b/Algoritmi_2/Laboratorio/Lab2/src/Main.java index 85189f5e2c08780fa85115d598edf691383d4a49..5b21021c85bc1763564ab38949e46e1bb1cec5cb 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("7; 0 4; 4 3; 1 3; 1 2; 0 2; 0 5; 5 2"); //Num Nodi + Archi + 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 BFS mioBFS = new BFS(mioGrafo); int source = 0; - int destination = 1; + int destination = 6; System.out.println(">>> Sorgente delle Operazione: " + source); System.out.println(">>> Destinazione delle Operazione: " + destination);