From 4f596e42faa17b4a10ac09d3acfcf7431b075259 Mon Sep 17 00:00:00 2001
From: 20050114 <20050114@studenti.uniupo.it>
Date: Mon, 29 Apr 2024 12:54:23 +0200
Subject: [PATCH] Add Lab6 and Lab5 need fix

---
 .../Laboratorio/Lab5/Test/TestLab.java        |   5 +
 Algoritmi_2/Laboratorio/Lab6/.gitignore       |  29 ++++
 Algoritmi_2/Laboratorio/Lab6/.idea/misc.xml   |   6 +
 .../Laboratorio/Lab6/.idea/modules.xml        |   8 ++
 Algoritmi_2/Laboratorio/Lab6/.idea/vcs.xml    |   6 +
 .../Laboratorio/Lab6/.idea/workspace.xml      | 118 ++++++++++++++++
 Algoritmi_2/Laboratorio/Lab6/Lab6.iml         |  39 ++++++
 .../Laboratorio/Lab6/Test/TestVoli.java       | 131 ++++++++++++++++++
 Algoritmi_2/Laboratorio/Lab6/src/Main.java    |   8 ++
 Algoritmi_2/Laboratorio/Lab6/src/Voli.java    | 122 ++++++++++++++++
 10 files changed, 472 insertions(+)
 create mode 100644 Algoritmi_2/Laboratorio/Lab6/.gitignore
 create mode 100644 Algoritmi_2/Laboratorio/Lab6/.idea/misc.xml
 create mode 100644 Algoritmi_2/Laboratorio/Lab6/.idea/modules.xml
 create mode 100644 Algoritmi_2/Laboratorio/Lab6/.idea/vcs.xml
 create mode 100644 Algoritmi_2/Laboratorio/Lab6/.idea/workspace.xml
 create mode 100644 Algoritmi_2/Laboratorio/Lab6/Lab6.iml
 create mode 100644 Algoritmi_2/Laboratorio/Lab6/Test/TestVoli.java
 create mode 100644 Algoritmi_2/Laboratorio/Lab6/src/Main.java
 create mode 100644 Algoritmi_2/Laboratorio/Lab6/src/Voli.java

diff --git a/Algoritmi_2/Laboratorio/Lab5/Test/TestLab.java b/Algoritmi_2/Laboratorio/Lab5/Test/TestLab.java
index 13edc1b..a058fc4 100644
--- a/Algoritmi_2/Laboratorio/Lab5/Test/TestLab.java
+++ b/Algoritmi_2/Laboratorio/Lab5/Test/TestLab.java
@@ -75,5 +75,10 @@ class TestLab {
         DirectedGraph cyclicGraph = new DirectedGraph("3; 0 1; 1 2; 2 0");
         DFS dfsCyclicTest = new DFS(cyclicGraph);
         Assertions.assertThrows(IllegalArgumentException.class, () -> dfsCyclicTest.topologicalOrderDag());
+
+        //Da sistemare, bisogna usare ordine fine visita invece che array di padri (per grafi orientati)
+        DirectedGraph cyclicGraph2 = new DirectedGraph("2; 0 1; 1 0;");
+        DFS dfsCyclicTest2 = new DFS(cyclicGraph2);
+        Assertions.assertThrows(IllegalArgumentException.class, () -> dfsCyclicTest2.topologicalOrderDag());
     }
 }
diff --git a/Algoritmi_2/Laboratorio/Lab6/.gitignore b/Algoritmi_2/Laboratorio/Lab6/.gitignore
new file mode 100644
index 0000000..f68d109
--- /dev/null
+++ b/Algoritmi_2/Laboratorio/Lab6/.gitignore
@@ -0,0 +1,29 @@
+### IntelliJ IDEA ###
+out/
+!**/src/main/**/out/
+!**/src/test/**/out/
+
+### Eclipse ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+bin/
+!**/src/main/**/bin/
+!**/src/test/**/bin/
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+
+### VS Code ###
+.vscode/
+
+### Mac OS ###
+.DS_Store
\ No newline at end of file
diff --git a/Algoritmi_2/Laboratorio/Lab6/.idea/misc.xml b/Algoritmi_2/Laboratorio/Lab6/.idea/misc.xml
new file mode 100644
index 0000000..69ace3f
--- /dev/null
+++ b/Algoritmi_2/Laboratorio/Lab6/.idea/misc.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="openjdk-21" project-jdk-type="JavaSDK">
+    <output url="file://$PROJECT_DIR$/out" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/Algoritmi_2/Laboratorio/Lab6/.idea/modules.xml b/Algoritmi_2/Laboratorio/Lab6/.idea/modules.xml
new file mode 100644
index 0000000..583d6bb
--- /dev/null
+++ b/Algoritmi_2/Laboratorio/Lab6/.idea/modules.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/Lab6.iml" filepath="$PROJECT_DIR$/Lab6.iml" />
+    </modules>
+  </component>
+</project>
\ No newline at end of file
diff --git a/Algoritmi_2/Laboratorio/Lab6/.idea/vcs.xml b/Algoritmi_2/Laboratorio/Lab6/.idea/vcs.xml
new file mode 100644
index 0000000..c2365ab
--- /dev/null
+++ b/Algoritmi_2/Laboratorio/Lab6/.idea/vcs.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$/../../.." vcs="Git" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/Algoritmi_2/Laboratorio/Lab6/.idea/workspace.xml b/Algoritmi_2/Laboratorio/Lab6/.idea/workspace.xml
new file mode 100644
index 0000000..d9a916e
--- /dev/null
+++ b/Algoritmi_2/Laboratorio/Lab6/.idea/workspace.xml
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="AutoImportSettings">
+    <option name="autoReloadType" value="SELECTIVE" />
+  </component>
+  <component name="ChangeListManager">
+    <list default="true" id="47e80429-8a37-4045-98c6-d9f72531884e" name="Changes" comment="">
+      <change afterPath="$PROJECT_DIR$/.idea/misc.xml" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/.idea/modules.xml" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/.idea/vcs.xml" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/Test/TestVoli.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/src/Voli.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../Lab5/Test/TestLab.java" beforeDir="false" afterPath="$PROJECT_DIR$/../Lab5/Test/TestLab.java" afterDir="false" />
+    </list>
+    <option name="SHOW_DIALOG" value="false" />
+    <option name="HIGHLIGHT_CONFLICTS" value="true" />
+    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
+    <option name="LAST_RESOLUTION" value="IGNORE" />
+  </component>
+  <component name="FileTemplateManagerImpl">
+    <option name="RECENT_TEMPLATES">
+      <list>
+        <option value="Class" />
+      </list>
+    </option>
+  </component>
+  <component name="FormatOnSaveOptions">
+    <option name="myRunOnSave" value="true" />
+  </component>
+  <component name="Git.Settings">
+    <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$/../../.." />
+  </component>
+  <component name="ProjectColorInfo">{
+  &quot;associatedIndex&quot;: 8
+}</component>
+  <component name="ProjectId" id="2fligKtvqSt5UTpaCzrCyG5VubV" />
+  <component name="ProjectLevelVcsManager">
+    <ConfirmationsSetting value="2" id="Add" />
+  </component>
+  <component name="ProjectViewState">
+    <option name="hideEmptyMiddlePackages" value="true" />
+    <option name="showLibraryContents" value="true" />
+  </component>
+  <component name="PropertiesComponent"><![CDATA[{
+  "keyToString": {
+    "ASKED_ADD_EXTERNAL_FILES": "true",
+    "Downloaded.Files.Path.Enabled": "false",
+    "Repository.Attach.Annotations": "false",
+    "Repository.Attach.JavaDocs": "false",
+    "Repository.Attach.Sources": "false",
+    "RunOnceActivity.OpenProjectViewOnStart": "true",
+    "RunOnceActivity.ShowReadmeOnStart": "true",
+    "git-widget-placeholder": "main",
+    "last_opened_file_path": "/home/20050114/Documents/appunti/Algoritmi_2/Laboratorio/Lab6/Test",
+    "project.structure.last.edited": "Modules",
+    "project.structure.proportion": "0.0",
+    "project.structure.side.proportion": "0.2",
+    "settings.editor.selected.configurable": "actions.on.save"
+  }
+}]]></component>
+  <component name="RecentsManager">
+    <key name="CopyFile.RECENT_KEYS">
+      <recent name="$PROJECT_DIR$/Test" />
+    </key>
+  </component>
+  <component name="RunManager" selected="JUnit.TestVoli">
+    <configuration name="TestVoli" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
+      <module name="Lab6" />
+      <option name="PACKAGE_NAME" value="" />
+      <option name="MAIN_CLASS_NAME" value="TestVoli" />
+      <option name="TEST_OBJECT" value="class" />
+      <method v="2">
+        <option name="Make" enabled="true" />
+      </method>
+    </configuration>
+    <configuration name="TestVoli.testScali" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
+      <module name="Lab6" />
+      <option name="PACKAGE_NAME" value="" />
+      <option name="MAIN_CLASS_NAME" value="TestVoli" />
+      <option name="METHOD_NAME" value="testScali" />
+      <option name="TEST_OBJECT" value="method" />
+      <method v="2">
+        <option name="Make" enabled="true" />
+      </method>
+    </configuration>
+    <configuration name="TestVoli.testTempo" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
+      <module name="Lab6" />
+      <option name="PACKAGE_NAME" value="" />
+      <option name="MAIN_CLASS_NAME" value="TestVoli" />
+      <option name="METHOD_NAME" value="testTempo" />
+      <option name="TEST_OBJECT" value="method" />
+      <method v="2">
+        <option name="Make" enabled="true" />
+      </method>
+    </configuration>
+    <recent_temporary>
+      <list>
+        <item itemvalue="JUnit.TestVoli" />
+        <item itemvalue="JUnit.TestVoli.testTempo" />
+        <item itemvalue="JUnit.TestVoli.testScali" />
+      </list>
+    </recent_temporary>
+  </component>
+  <component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
+  <component name="TaskManager">
+    <task active="true" id="Default" summary="Default task">
+      <changelist id="47e80429-8a37-4045-98c6-d9f72531884e" name="Changes" comment="" />
+      <created>1714382175723</created>
+      <option name="number" value="Default" />
+      <option name="presentableId" value="Default" />
+      <updated>1714382175723</updated>
+    </task>
+    <servers />
+  </component>
+  <component name="VcsManagerConfiguration">
+    <option name="ADD_EXTERNAL_FILES_SILENTLY" value="true" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/Algoritmi_2/Laboratorio/Lab6/Lab6.iml b/Algoritmi_2/Laboratorio/Lab6/Lab6.iml
new file mode 100644
index 0000000..e40bd7b
--- /dev/null
+++ b/Algoritmi_2/Laboratorio/Lab6/Lab6.iml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/Test" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module-library">
+      <library>
+        <CLASSES>
+          <root url="jar://$MODULE_DIR$/../graphLib.jar!/" />
+        </CLASSES>
+        <JAVADOC>
+          <root url="jar://$MODULE_DIR$/../graphLib.jar!/doc" />
+        </JAVADOC>
+        <SOURCES />
+      </library>
+    </orderEntry>
+    <orderEntry type="module-library" scope="TEST">
+      <library name="JUnit5.8.1">
+        <CLASSES>
+          <root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter/5.8.1/junit-jupiter-5.8.1.jar!/" />
+          <root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-api/5.8.1/junit-jupiter-api-5.8.1.jar!/" />
+          <root url="jar://$MAVEN_REPOSITORY$/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar!/" />
+          <root url="jar://$MAVEN_REPOSITORY$/org/junit/platform/junit-platform-commons/1.8.1/junit-platform-commons-1.8.1.jar!/" />
+          <root url="jar://$MAVEN_REPOSITORY$/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar!/" />
+          <root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-params/5.8.1/junit-jupiter-params-5.8.1.jar!/" />
+          <root url="jar://$MAVEN_REPOSITORY$/org/junit/jupiter/junit-jupiter-engine/5.8.1/junit-jupiter-engine-5.8.1.jar!/" />
+          <root url="jar://$MAVEN_REPOSITORY$/org/junit/platform/junit-platform-engine/1.8.1/junit-platform-engine-1.8.1.jar!/" />
+        </CLASSES>
+        <JAVADOC />
+        <SOURCES />
+      </library>
+    </orderEntry>
+  </component>
+</module>
\ No newline at end of file
diff --git a/Algoritmi_2/Laboratorio/Lab6/Test/TestVoli.java b/Algoritmi_2/Laboratorio/Lab6/Test/TestVoli.java
new file mode 100644
index 0000000..6ec5f61
--- /dev/null
+++ b/Algoritmi_2/Laboratorio/Lab6/Test/TestVoli.java
@@ -0,0 +1,131 @@
+import it.uniupo.graphLib.DirectedGraph;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class TestVoli {
+
+    @Test
+    public void testTempo() {
+        DirectedGraph graph = new DirectedGraph("3;0 1 3;0 2 6;1 2 1");
+        Voli testVoli = new Voli(graph);
+        int tempo = testVoli.tempo(0, 2);
+        assertEquals(6, tempo);
+
+        graph = new DirectedGraph("3;0 1 3");
+        testVoli = new Voli(graph);
+        tempo = testVoli.tempo(0, 2);
+        assertEquals(-1, tempo);
+    }
+
+    @Test
+    public void testTempoExc1() {
+        DirectedGraph graph = new DirectedGraph("3;0 1 3;0 2 6;1 2 1");
+        Voli testVoli = new Voli(graph);
+        Assertions.assertThrows(java.lang.IllegalArgumentException.class, () -> {
+            testVoli.tempo(-1, 2);
+        });
+    }
+
+    @Test
+    public void testTempoExc2() {
+        DirectedGraph graph = new DirectedGraph("3;0 1 3;0 2 6;1 2 1");
+        Voli testVoli = new Voli(graph);
+        Assertions.assertThrows(java.lang.IllegalArgumentException.class, () -> {
+            testVoli.tempo(0, 3);
+        });
+    }
+
+    @Test
+    public void testScali() {
+        DirectedGraph graph = new DirectedGraph("3;0 1 3;0 2 6;1 2 1");
+        Voli testVoli = new Voli(graph);
+        int scali = testVoli.scali(0, 2);
+        assertEquals(0, scali);
+
+        graph = new DirectedGraph("3;0 1 3");
+        testVoli = new Voli(graph);
+        scali = testVoli.scali(0, 2);
+        assertEquals(-1, scali);
+
+    }
+
+    @Test
+    public void testScaliExc() {
+        DirectedGraph graph = new DirectedGraph("3;0 1 3;0 2 6;1 2 1");
+        Voli testVoli = new Voli(graph);
+        Assertions.assertThrows(java.lang.IllegalArgumentException.class, () -> {
+            testVoli.scali(-1, 2);
+        });
+    }
+
+    @Test
+    public void testTempoMinimo() {
+        DirectedGraph graph = new DirectedGraph("3;0 1 3;0 2 6;1 2 1");
+        Voli testVoli = new Voli(graph);
+        int tempoMinimo = testVoli.tempoMinimo(0, 2);
+        assertEquals(4, tempoMinimo);
+
+        graph = new DirectedGraph("3;0 1 3");
+        testVoli = new Voli(graph);
+        tempoMinimo = testVoli.tempoMinimo(0, 2);
+        assertEquals(-1, tempoMinimo);
+
+    }
+
+    @Test
+    public void testTempoMinimoExc() {
+        DirectedGraph graph = new DirectedGraph("3;0 1 3;0 2 6;1 2 1");
+        Voli testVoli = new Voli(graph);
+        Assertions.assertThrows(java.lang.IllegalArgumentException.class, () -> {
+            testVoli.tempoMinimo(-1, 2);
+        });
+    }
+
+/*
+    @Test
+    public void testPercorsoTempoMinimo() {
+        DirectedGraph graph = new DirectedGraph("3;0 1 3;0 2 6;1 2 1");
+        Voli testVoli = new Voli(graph);
+        ArrayList<Edge> percTempMin = testVoli.trattaVeloce(0, 2);
+        assertEquals(2, percTempMin.size());
+        assertEquals(percTempMin.get(0), new Edge(0, 1));
+        assertEquals(percTempMin.get(1), new Edge(1, 2));
+
+        graph = new DirectedGraph("3;0 1 3");
+        testVoli = new Voli(graph);
+        percTempMin = testVoli.trattaVeloce(0, 2);
+        assertTrue(percTempMin == null);
+
+        percTempMin = testVoli.trattaVeloce(0, 1);
+        assertEquals(1, percTempMin.size());
+        assertEquals(percTempMin.get(0), new Edge(0, 1));
+
+    }
+
+    @Test
+    public void testPercorsoScaliMinimo() {
+        DirectedGraph graph = new DirectedGraph("3;0 1 3;0 2 6;1 2 1");
+        Voli testVoli = new Voli(graph);
+        ArrayList<Integer> percScaliMin = testVoli.elencoScali(0, 2);
+        assertEquals(0, percScaliMin.size());
+
+        graph = new DirectedGraph("3;0 1 3");
+        testVoli = new Voli(graph);
+        percScaliMin = testVoli.elencoScali(0, 2);
+        assertTrue(percScaliMin == null);
+
+        graph = new DirectedGraph("1");
+        testVoli = new Voli(graph);
+        percScaliMin = testVoli.elencoScali(0, 0);
+        assertEquals(0, percScaliMin.size());
+
+        graph = new DirectedGraph("4; 2 1 1; 1 0 4; 2 3 2; 1 3 3;3 0 2");
+        testVoli = new Voli(graph);
+        percScaliMin = testVoli.elencoScali(2, 0);
+        assertEquals(1, percScaliMin.size());
+        assertEquals(1, percScaliMin.get(0).intValue());
+    }
+*/
+}
\ No newline at end of file
diff --git a/Algoritmi_2/Laboratorio/Lab6/src/Main.java b/Algoritmi_2/Laboratorio/Lab6/src/Main.java
new file mode 100644
index 0000000..7ba877b
--- /dev/null
+++ b/Algoritmi_2/Laboratorio/Lab6/src/Main.java
@@ -0,0 +1,8 @@
+import it.uniupo.graphLib.DirectedGraph;
+
+public class Main {
+    public static void main(String[] args) {
+        DirectedGraph graph = new DirectedGraph("3; 0 1; ");
+        //Voli v = new Voli("3");
+    }
+}
\ No newline at end of file
diff --git a/Algoritmi_2/Laboratorio/Lab6/src/Voli.java b/Algoritmi_2/Laboratorio/Lab6/src/Voli.java
new file mode 100644
index 0000000..388254b
--- /dev/null
+++ b/Algoritmi_2/Laboratorio/Lab6/src/Voli.java
@@ -0,0 +1,122 @@
+import it.uniupo.algoTools.MinHeap;
+import it.uniupo.graphLib.DirectedGraph;
+import it.uniupo.graphLib.Edge;
+import it.uniupo.graphLib.GraphInterface;
+
+import java.util.Arrays;
+import java.util.LinkedList;
+import java.util.Queue;
+
+public class Voli {
+
+    private DirectedGraph myCollegamenti;
+    private boolean[] founded;
+
+
+    public Voli(DirectedGraph collegamenti) {
+        this.myCollegamenti = collegamenti;
+        this.founded = new boolean[myCollegamenti.getOrder()];
+    }
+
+    private int[] dijkstra(int sorg) {
+        int[] distance = new int[myCollegamenti.getOrder()];
+        Arrays.fill(distance, -1);
+
+        founded[sorg] = true;
+        distance[sorg] = 0;
+        MinHeap<Edge, Integer> heap = new MinHeap<Edge, Integer>();
+
+        for (Edge e : myCollegamenti.getOutEdges(sorg)) {
+            heap.add(e, distance[sorg] + e.getWeight());
+        }
+
+        while (!heap.isEmpty()) {
+            Edge heapReturnedEdge = heap.extractMin(); //arco (u,w), u alla prima iterazione è uguale a sorg
+            int nodeU = heapReturnedEdge.getTail();
+            int nodeW = heapReturnedEdge.getHead();
+            if (!founded[nodeW]) {
+                founded[nodeW] = true;
+                distance[nodeW] = distance[nodeU] + heapReturnedEdge.getWeight();
+                for (Edge e : myCollegamenti.getOutEdges(nodeW)) {
+                    heap.add(e, distance[nodeW] + e.getWeight());
+                }
+            }
+        }
+        return distance;
+    }
+
+    private int[] bfs(int sorg) {
+        if (sorg >= this.myCollegamenti.getOrder()) {
+            throw new IllegalArgumentException("Sorgente errata");
+        }
+        founded[sorg] = true;
+        int[] bfsDistance = new int[myCollegamenti.getOrder()];
+        Arrays.fill(bfsDistance, -1);
+        bfsDistance[sorg] = 0;
+        Queue<Integer> q = new LinkedList<>();
+        q.add(sorg);
+        while (!q.isEmpty()) {
+            int u = q.remove();
+            for (int v : myCollegamenti.getNeighbors(u)) {
+                if (!founded[v]) {
+                    founded[v] = true;
+                    q.add(v);
+                    bfsDistance[v] = bfsDistance[u] + 1;
+                }
+            }
+        }
+        return bfsDistance;
+    }
+
+    private int[] bfsTime(int sorg) {
+        if (sorg >= this.myCollegamenti.getOrder()) {
+            throw new IllegalArgumentException("Sorgente errata");
+        }
+        founded[sorg] = true;
+        int[] bfsDistanceWeigth = new int[myCollegamenti.getOrder()];
+        Arrays.fill(bfsDistanceWeigth, -1);
+        bfsDistanceWeigth[sorg] = 0;
+        Queue<Integer> q = new LinkedList<>();
+        q.add(sorg);
+        while (!q.isEmpty()) {
+            int u = q.remove();
+            for (Edge uv : myCollegamenti.getOutEdges(u)) {
+                int v = uv.getHead();
+                if (!founded[v]) {
+                    founded[v] = true;
+                    q.add(v);
+                    bfsDistanceWeigth[v] = bfsDistanceWeigth[u] + uv.getWeight();
+                }
+            }
+        }
+        return bfsDistanceWeigth;
+    }
+
+    public int tempoMinimo(int partenza, int destinazione) {
+        if (partenza >= myCollegamenti.getOrder() || destinazione >= myCollegamenti.getOrder() || partenza <= -1 || destinazione <= -1) {
+            throw new IllegalArgumentException("Aereoporto di partenza o di destinazione non esite");
+        }
+        Arrays.fill(founded, false);
+        int[] d = dijkstra(partenza);
+        return d[destinazione];
+    }
+
+    public int scali(int partenza, int destinazione) {
+        if (partenza >= myCollegamenti.getOrder() || destinazione >= myCollegamenti.getOrder() || partenza <= -1 || destinazione <= -1) {
+            throw new IllegalArgumentException("Aereoporto di partenza o di destinazione non esite");
+        }
+        int[] res = bfs(partenza);
+        if (partenza == destinazione) return 0;
+
+        if (res[destinazione] != -1) return --res[destinazione];
+        else return res[destinazione];
+    }
+
+    public int tempo(int partenza, int destinazione) {
+        if (partenza >= myCollegamenti.getOrder() || destinazione >= myCollegamenti.getOrder() || partenza <= -1 || destinazione <= -1) {
+            throw new IllegalArgumentException("Aereoporto di partenza o di destinazione non esite");
+        }
+        Arrays.fill(founded, false);
+        return bfsTime(partenza)[destinazione];
+    }
+}
-- 
GitLab