diff --git a/Grafi/.vs/Grafi/DesignTimeBuild/.dtbcache.v2 b/Grafi/.vs/Grafi/DesignTimeBuild/.dtbcache.v2
new file mode 100644
index 0000000000000000000000000000000000000000..9eebc6a59ee61a002f2fed065f83cbeabe540b2f
Binary files /dev/null and b/Grafi/.vs/Grafi/DesignTimeBuild/.dtbcache.v2 differ
diff --git a/Grafi/.vs/Grafi/v16/.suo b/Grafi/.vs/Grafi/v16/.suo
new file mode 100644
index 0000000000000000000000000000000000000000..4a21638a0fea4667efcd2a99d227143e50c38721
Binary files /dev/null and b/Grafi/.vs/Grafi/v16/.suo differ
diff --git a/Grafi/Grafi.sln b/Grafi/Grafi.sln
new file mode 100644
index 0000000000000000000000000000000000000000..36c3efb73d8c6e73ece31cd0058db9b4b081c120
--- /dev/null
+++ b/Grafi/Grafi.sln
@@ -0,0 +1,31 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.32002.261
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LibreriaGrafi", "LibreriaGrafi\LibreriaGrafi.csproj", "{07DE39C2-AF81-44A4-A048-C848B2CD66C5}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PercorsoDijkstra", "PercorsoDijkstra\PercorsoDijkstra.csproj", "{05C00BA9-0229-4649-92F0-45181941E2DD}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{07DE39C2-AF81-44A4-A048-C848B2CD66C5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{07DE39C2-AF81-44A4-A048-C848B2CD66C5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{07DE39C2-AF81-44A4-A048-C848B2CD66C5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{07DE39C2-AF81-44A4-A048-C848B2CD66C5}.Release|Any CPU.Build.0 = Release|Any CPU
+		{05C00BA9-0229-4649-92F0-45181941E2DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{05C00BA9-0229-4649-92F0-45181941E2DD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{05C00BA9-0229-4649-92F0-45181941E2DD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{05C00BA9-0229-4649-92F0-45181941E2DD}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+	GlobalSection(ExtensibilityGlobals) = postSolution
+		SolutionGuid = {1C736D2E-7FB6-4F2D-B2E9-F5F46B8B8E9D}
+	EndGlobalSection
+EndGlobal
diff --git a/Grafi/LibreriaGrafi/Grafo.cs b/Grafi/LibreriaGrafi/Grafo.cs
new file mode 100644
index 0000000000000000000000000000000000000000..3c0119a902aad263da486b7accec2160877d2c91
--- /dev/null
+++ b/Grafi/LibreriaGrafi/Grafo.cs
@@ -0,0 +1,166 @@
+/*
+ *         Progetto: Libreria per lo studio dei grafi
+ * 
+ *           Autore: Roberto Fuligni
+ *  Ultima modifica: 06/03/2022
+ *  
+ *      Descrizione: Gestione dei nodi e dei vertici di un grafo. 
+ */
+
+using System.Collections.Generic;
+using System.Text;
+
+namespace LibreriaGrafi
+{
+    public class Grafo
+    {
+        public const int Infinito = int.MaxValue;
+        public const int NessunNodo = int.MinValue;
+        public enum Tipo { Orientato, NonOrientato };
+
+        private int numNodi;
+        private Tipo tipo;  
+        private int[,] pesi;
+
+        // Accesso ai pesi degli archi attraverso gli indici dei nodi sorgente e destinazione
+        // Esempio: g[1][3] = 20        Memorizza un arco (orientato oppure non orientato, in base al tipo di grafo)
+        //                              di peso 20 dal nodo sorgente 1 al nodo destinazione 3
+        public int this[int sorg, int dest]
+        {
+            get { return pesi[sorg, dest]; }
+            set
+            {
+                pesi[sorg, dest] = value;
+                // Un arco non orientato equivale a una coppia di archi orientati
+                if (tipo == Grafo.Tipo.NonOrientato)
+                    pesi[dest, sorg] = value;
+            }
+        }
+
+        public Grafo(int numNodi, Tipo tipo = Tipo.Orientato)
+        {
+            this.numNodi = numNodi;
+            this.tipo = tipo;
+            pesi = new int[numNodi, numNodi];
+            // Inizializzazione dei pesi del grafo
+            // All'inizio il grafo non contiene archi -> tutti i pesi sono infiniti
+            for (int i = 0; i < numNodi; i++)
+                for (int j = 0; j < numNodi; j++)
+                    pesi[i, j] = Grafo.Infinito;
+        }
+
+        // Calcolo del percorso a costo minimo, a partire da un dato nodo sorgente,
+        // mediante l'algorimo di Dijkstra.
+        // Il metodo restituisce un nuovo grafo rappresentante il Minimum Spanning Tree
+        // elaborato a partire dal nodo indicato.
+        public Grafo Dijkstra(int partenza)
+        {
+            // Definizione dello stato dei nodi mediante vettori paralleli
+
+            int[] costoTot = new int[numNodi];     // Vettore dei costi totali
+            int[] pred = new int[numNodi];        // Vettore dei nodi predecessori 
+
+            // Criterio di confronto tra due nodi (utilizzato per stabilire la priorità di elaborazione nella coda)
+            // definito mediante statement Lambda.
+            //
+            // Dati due nodi A e B, la funzione di confronto restituisce un numero negativo se A è elaborato prima di B
+            // (A ha priorità maggiore); un numero positivo se A è elaborato dopo B.
+            // Il risultato del confronto è calcolato per differenza tra i costi totali di A e B (precedenza ai costi minori)
+            // Nel caso di costi uguali, si sceglie di stabilire la priorità in base all'id del nodo (precedenza agli id minori).
+
+            IComparer<int> confrontaNodi = Comparer<int>.Create(
+                (a, b) =>
+                {
+                    int pa = costoTot[a];
+                    int pb = costoTot[b];
+                    return  (pa != pb ? pa - pb : a - b);
+                });
+
+            // Implementazione di una coda con priorità mediante SortedSet.
+            // La coda contiene gli id dei nodi in attesa di essere elaborati.
+            // Gli elementi inseriti nella coda sono ordinati in base alla priorità:
+            // il primo elemento della coda (elemento minimo) corrisponde al
+            // nodo con priorità maggiore.
+
+            SortedSet<int> coda = new SortedSet<int>(confrontaNodi);
+
+            // Fase 1: Inizializzazione dello stato e inserimento dei nodi in coda
+            for (int i = 0; i < numNodi; i++)
+            {
+                costoTot[i] = (i == partenza ? 0 : Grafo.Infinito);
+                pred[i] = Grafo.NessunNodo;
+                coda.Add(i);
+            }
+
+            while (coda.Count > 0)
+            {
+                // Estrazione dalla coda del nodo a costo minimo
+                int corrente = coda.Min;
+                coda.Remove(corrente);
+                
+                // Se il nodo estratto ha peso infinito, la coda contiene solo nodi irraggiungibili:
+                // il ciclo può essere interrotto.
+                if (costoTot[corrente] == Grafo.Infinito)
+                    break;
+
+                for (int vicino = 0; vicino < numNodi; vicino++)
+                {
+                    // Analisi dei nodi vicini (collegati al nodo corrente con un arco)
+                    int peso = this[corrente, vicino];
+                    if (peso != Grafo.Infinito && costoTot[corrente] + peso < costoTot[vicino])
+                    {
+                        // Per aggiornare il costo totale, si rimuove il nodo "vicino" dal set,
+                        // si ricalcola il suo costo e si reinserisce il nodo aggiornato nel set.
+                        // Questa operazioni sono equivalenti all'aggiornamento della priorità
+                        // del nodo nella coda.
+
+                        coda.Remove(vicino);
+                        costoTot[vicino] = costoTot[corrente] + peso;
+                        pred[vicino] = corrente;    // Aggiornamento del nodo predecessore
+                        coda.Add(vicino);
+                    }
+                }
+            }
+
+            // Costruzione del grafo MST a partire dagli stati finali dei nodi
+            Grafo mst = new Grafo(numNodi, Grafo.Tipo.Orientato);
+            for (int i = 0; i < numNodi; i++)
+            {
+                int h = pred[i];
+                // Se il nodo i ha un predecessore, si inserisce nel grafo l'arco pesato h -> i 
+                if (h != Grafo.NessunNodo)
+                    mst[h, i] = pesi[h, i];
+            }
+            return mst;
+        }
+
+        public override string ToString()
+        {
+            // Rappresentazione testuale del grafo.
+            // Il formato di rappresentazione è compatibile con
+            // il software GraphViz (https://graphviz.org/).
+
+            // Strumento online per visualizzare un grafo in formato GraphViz:
+            // https://dreampuf.github.io/GraphvizOnline/
+
+
+            var sb = new StringBuilder();
+            string tg = tipo == Grafo.Tipo.Orientato ? "digraph" : "graph";
+            string tl = tipo == Grafo.Tipo.Orientato ? "->" : "--";
+            sb.AppendLine(tg + " {");
+            for (int i = 0; i < numNodi; i++)
+            {
+                int inizio = tipo == Grafo.Tipo.NonOrientato ? i : 0;
+                for (int j = inizio; j < numNodi; j++)
+                {
+                    int peso = this[i, j];
+                    if (peso != Grafo.Infinito)
+                        sb.AppendLine($"   {i} {tl} {j} [label={peso}];");
+                }
+            }
+
+            sb.AppendLine("}");
+            return sb.ToString();
+        }
+    }
+}
diff --git a/Grafi/LibreriaGrafi/LibreriaGrafi.csproj b/Grafi/LibreriaGrafi/LibreriaGrafi.csproj
new file mode 100644
index 0000000000000000000000000000000000000000..f208d303c9811fa05807ef8f72685b8ebb536a37
--- /dev/null
+++ b/Grafi/LibreriaGrafi/LibreriaGrafi.csproj
@@ -0,0 +1,7 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>net5.0</TargetFramework>
+  </PropertyGroup>
+
+</Project>
diff --git a/Grafi/LibreriaGrafi/obj/Debug/net5.0/.NETCoreApp,Version=v5.0.AssemblyAttributes.cs b/Grafi/LibreriaGrafi/obj/Debug/net5.0/.NETCoreApp,Version=v5.0.AssemblyAttributes.cs
new file mode 100644
index 0000000000000000000000000000000000000000..2f7e5ec5afa156f8313c6a17e8a80a25246858f5
--- /dev/null
+++ b/Grafi/LibreriaGrafi/obj/Debug/net5.0/.NETCoreApp,Version=v5.0.AssemblyAttributes.cs
@@ -0,0 +1,4 @@
+// <autogenerated />
+using System;
+using System.Reflection;
+[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v5.0", FrameworkDisplayName = "")]
diff --git a/Grafi/LibreriaGrafi/obj/Debug/net5.0/LibreriaGrafi.assets.cache b/Grafi/LibreriaGrafi/obj/Debug/net5.0/LibreriaGrafi.assets.cache
new file mode 100644
index 0000000000000000000000000000000000000000..8cd7f9142b2cc19d0625ae3449aef1e518c379ff
Binary files /dev/null and b/Grafi/LibreriaGrafi/obj/Debug/net5.0/LibreriaGrafi.assets.cache differ
diff --git a/Grafi/LibreriaGrafi/obj/Debug/net5.0/LibreriaGrafi.csproj.FileListAbsolute.txt b/Grafi/LibreriaGrafi/obj/Debug/net5.0/LibreriaGrafi.csproj.FileListAbsolute.txt
new file mode 100644
index 0000000000000000000000000000000000000000..55f5ca66449c10620e24fed3c7109ff7d46fbfe2
--- /dev/null
+++ b/Grafi/LibreriaGrafi/obj/Debug/net5.0/LibreriaGrafi.csproj.FileListAbsolute.txt
@@ -0,0 +1,12 @@
+C:\Users\Fuligni\source\repos\Grafi\LibreriaGrafi\obj\Debug\net5.0\LibreriaGrafi.csproj.AssemblyReference.cache
+C:\Users\Fuligni\source\repos\Grafi\LibreriaGrafi\obj\Debug\net5.0\LibreriaGrafi.GeneratedMSBuildEditorConfig.editorconfig
+C:\Users\Fuligni\source\repos\Grafi\LibreriaGrafi\obj\Debug\net5.0\LibreriaGrafi.AssemblyInfoInputs.cache
+C:\Users\Fuligni\source\repos\Grafi\LibreriaGrafi\obj\Debug\net5.0\LibreriaGrafi.AssemblyInfo.cs
+C:\Users\Fuligni\source\repos\Grafi\LibreriaGrafi\obj\Debug\net5.0\LibreriaGrafi.csproj.CoreCompileInputs.cache
+C:\Users\Fuligni\source\repos\Grafi\LibreriaGrafi\bin\Debug\net5.0\LibreriaGrafi.deps.json
+C:\Users\Fuligni\source\repos\Grafi\LibreriaGrafi\bin\Debug\net5.0\LibreriaGrafi.dll
+C:\Users\Fuligni\source\repos\Grafi\LibreriaGrafi\bin\Debug\net5.0\ref\LibreriaGrafi.dll
+C:\Users\Fuligni\source\repos\Grafi\LibreriaGrafi\bin\Debug\net5.0\LibreriaGrafi.pdb
+C:\Users\Fuligni\source\repos\Grafi\LibreriaGrafi\obj\Debug\net5.0\LibreriaGrafi.dll
+C:\Users\Fuligni\source\repos\Grafi\LibreriaGrafi\obj\Debug\net5.0\ref\LibreriaGrafi.dll
+C:\Users\Fuligni\source\repos\Grafi\LibreriaGrafi\obj\Debug\net5.0\LibreriaGrafi.pdb
diff --git a/Grafi/LibreriaGrafi/obj/LibreriaGrafi.csproj.nuget.dgspec.json b/Grafi/LibreriaGrafi/obj/LibreriaGrafi.csproj.nuget.dgspec.json
new file mode 100644
index 0000000000000000000000000000000000000000..9d921a8556fab7e91023b4c64ce1009458a3a053
--- /dev/null
+++ b/Grafi/LibreriaGrafi/obj/LibreriaGrafi.csproj.nuget.dgspec.json
@@ -0,0 +1,62 @@
+{
+  "format": 1,
+  "restore": {
+    "C:\\Users\\Fuligni\\OneDrive\\Desktop\\4A\\SR\\algoritmi-di-routing\\Grafi\\LibreriaGrafi\\LibreriaGrafi.csproj": {}
+  },
+  "projects": {
+    "C:\\Users\\Fuligni\\OneDrive\\Desktop\\4A\\SR\\algoritmi-di-routing\\Grafi\\LibreriaGrafi\\LibreriaGrafi.csproj": {
+      "version": "1.0.0",
+      "restore": {
+        "projectUniqueName": "C:\\Users\\Fuligni\\OneDrive\\Desktop\\4A\\SR\\algoritmi-di-routing\\Grafi\\LibreriaGrafi\\LibreriaGrafi.csproj",
+        "projectName": "LibreriaGrafi",
+        "projectPath": "C:\\Users\\Fuligni\\OneDrive\\Desktop\\4A\\SR\\algoritmi-di-routing\\Grafi\\LibreriaGrafi\\LibreriaGrafi.csproj",
+        "packagesPath": "C:\\Users\\Fuligni\\.nuget\\packages\\",
+        "outputPath": "C:\\Users\\Fuligni\\OneDrive\\Desktop\\4A\\SR\\algoritmi-di-routing\\Grafi\\LibreriaGrafi\\obj\\",
+        "projectStyle": "PackageReference",
+        "configFilePaths": [
+          "C:\\Users\\Fuligni\\AppData\\Roaming\\NuGet\\NuGet.Config",
+          "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
+        ],
+        "originalTargetFrameworks": [
+          "net5.0"
+        ],
+        "sources": {
+          "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
+          "https://api.nuget.org/v3/index.json": {}
+        },
+        "frameworks": {
+          "net5.0": {
+            "targetAlias": "net5.0",
+            "projectReferences": {}
+          }
+        },
+        "warningProperties": {
+          "warnAsError": [
+            "NU1605"
+          ]
+        }
+      },
+      "frameworks": {
+        "net5.0": {
+          "targetAlias": "net5.0",
+          "imports": [
+            "net461",
+            "net462",
+            "net47",
+            "net471",
+            "net472",
+            "net48"
+          ],
+          "assetTargetFallback": true,
+          "warn": true,
+          "frameworkReferences": {
+            "Microsoft.NETCore.App": {
+              "privateAssets": "all"
+            }
+          },
+          "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\6.0.101\\RuntimeIdentifierGraph.json"
+        }
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/Grafi/LibreriaGrafi/obj/LibreriaGrafi.csproj.nuget.g.props b/Grafi/LibreriaGrafi/obj/LibreriaGrafi.csproj.nuget.g.props
new file mode 100644
index 0000000000000000000000000000000000000000..a67070b3fe0b60792a9778b6dea07c62ce2ee5d9
--- /dev/null
+++ b/Grafi/LibreriaGrafi/obj/LibreriaGrafi.csproj.nuget.g.props
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
+    <RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
+    <RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
+    <ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
+    <NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
+    <NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\Fuligni\.nuget\packages\</NuGetPackageFolders>
+    <NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
+    <NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">5.11.1</NuGetToolVersion>
+  </PropertyGroup>
+  <ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
+    <SourceRoot Include="C:\Users\Fuligni\.nuget\packages\" />
+  </ItemGroup>
+  <PropertyGroup>
+    <MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
+  </PropertyGroup>
+</Project>
\ No newline at end of file
diff --git a/Grafi/LibreriaGrafi/obj/LibreriaGrafi.csproj.nuget.g.targets b/Grafi/LibreriaGrafi/obj/LibreriaGrafi.csproj.nuget.g.targets
new file mode 100644
index 0000000000000000000000000000000000000000..53cfaa19b16f3769b2bfc33db3b5c0053c16fdba
--- /dev/null
+++ b/Grafi/LibreriaGrafi/obj/LibreriaGrafi.csproj.nuget.g.targets
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
+  </PropertyGroup>
+</Project>
\ No newline at end of file
diff --git a/Grafi/LibreriaGrafi/obj/project.assets.json b/Grafi/LibreriaGrafi/obj/project.assets.json
new file mode 100644
index 0000000000000000000000000000000000000000..902619e976837514a1c6005bce7024452833d15c
--- /dev/null
+++ b/Grafi/LibreriaGrafi/obj/project.assets.json
@@ -0,0 +1,67 @@
+{
+  "version": 3,
+  "targets": {
+    "net5.0": {}
+  },
+  "libraries": {},
+  "projectFileDependencyGroups": {
+    "net5.0": []
+  },
+  "packageFolders": {
+    "C:\\Users\\Fuligni\\.nuget\\packages\\": {}
+  },
+  "project": {
+    "version": "1.0.0",
+    "restore": {
+      "projectUniqueName": "C:\\Users\\Fuligni\\OneDrive\\Desktop\\4A\\SR\\algoritmi-di-routing\\Grafi\\LibreriaGrafi\\LibreriaGrafi.csproj",
+      "projectName": "LibreriaGrafi",
+      "projectPath": "C:\\Users\\Fuligni\\OneDrive\\Desktop\\4A\\SR\\algoritmi-di-routing\\Grafi\\LibreriaGrafi\\LibreriaGrafi.csproj",
+      "packagesPath": "C:\\Users\\Fuligni\\.nuget\\packages\\",
+      "outputPath": "C:\\Users\\Fuligni\\OneDrive\\Desktop\\4A\\SR\\algoritmi-di-routing\\Grafi\\LibreriaGrafi\\obj\\",
+      "projectStyle": "PackageReference",
+      "configFilePaths": [
+        "C:\\Users\\Fuligni\\AppData\\Roaming\\NuGet\\NuGet.Config",
+        "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
+      ],
+      "originalTargetFrameworks": [
+        "net5.0"
+      ],
+      "sources": {
+        "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
+        "https://api.nuget.org/v3/index.json": {}
+      },
+      "frameworks": {
+        "net5.0": {
+          "targetAlias": "net5.0",
+          "projectReferences": {}
+        }
+      },
+      "warningProperties": {
+        "warnAsError": [
+          "NU1605"
+        ]
+      }
+    },
+    "frameworks": {
+      "net5.0": {
+        "targetAlias": "net5.0",
+        "imports": [
+          "net461",
+          "net462",
+          "net47",
+          "net471",
+          "net472",
+          "net48"
+        ],
+        "assetTargetFallback": true,
+        "warn": true,
+        "frameworkReferences": {
+          "Microsoft.NETCore.App": {
+            "privateAssets": "all"
+          }
+        },
+        "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\6.0.101\\RuntimeIdentifierGraph.json"
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/Grafi/PercorsoDijkstra/PercorsoDijkstra.cs b/Grafi/PercorsoDijkstra/PercorsoDijkstra.cs
new file mode 100644
index 0000000000000000000000000000000000000000..3e0efbb84e2f606c718180c4ede90971a725dddb
--- /dev/null
+++ b/Grafi/PercorsoDijkstra/PercorsoDijkstra.cs
@@ -0,0 +1,41 @@
+/*
+ *         Progetto: Calcolo del percorso a costo minimo mediante algoritmo di Dijkstra 
+ * 
+ *           Autore: Roberto Fuligni
+ *  Ultima modifica: 07/03/2022
+ *  
+ *      Descrizione: Costruisce un grafo pesato e determina il MST a partire da un dato nodo sorgente.
+ *                   Il grafo iniziale e il MSt sono visualizzati in formato GraphViz.
+ */
+
+using LibreriaGrafi;
+using System;
+
+namespace PercorsoDijkstra
+{
+    class PercorsoDijkstra
+    {
+        static void Main(string[] args)
+        {
+            // Esempio di grafo non orientato con sei nodi.
+            // Gli archi non hanno pesi negativi
+
+            const int NumeroNodi = 6;
+            var g = new Grafo(NumeroNodi, Grafo.Tipo.NonOrientato);
+            g[0, 1] = 4; g[0, 5] = 3; g[0, 1] = 4;
+            g[0, 5] = 3; g[1, 2] = 2; g[1, 4] = 5;
+            g[1, 5] = 1; g[2, 3] = 2; g[3, 4] = 1;
+            g[3, 5] = 6; g[4, 5] = 20;
+
+            Console.WriteLine("Per visualizzare un grafo: https://dreampuf.github.io/GraphvizOnline");
+            Console.WriteLine("# GRAFO INIZIALE");
+            Console.WriteLine(g);
+            
+            Grafo mst = g.Dijkstra(0);
+            
+            Console.WriteLine();
+            Console.WriteLine("# MST");
+            Console.WriteLine(mst);
+        }
+    }
+}
diff --git a/Grafi/PercorsoDijkstra/PercorsoDijkstra.csproj b/Grafi/PercorsoDijkstra/PercorsoDijkstra.csproj
new file mode 100644
index 0000000000000000000000000000000000000000..b8164bd2dbe84e909a8725440d05234edfe1f97f
--- /dev/null
+++ b/Grafi/PercorsoDijkstra/PercorsoDijkstra.csproj
@@ -0,0 +1,12 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>Exe</OutputType>
+    <TargetFramework>net5.0</TargetFramework>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\LibreriaGrafi\LibreriaGrafi.csproj" />
+  </ItemGroup>
+
+</Project>
diff --git a/Grafi/PercorsoDijkstra/obj/Debug/net5.0/.NETCoreApp,Version=v5.0.AssemblyAttributes.cs b/Grafi/PercorsoDijkstra/obj/Debug/net5.0/.NETCoreApp,Version=v5.0.AssemblyAttributes.cs
new file mode 100644
index 0000000000000000000000000000000000000000..2f7e5ec5afa156f8313c6a17e8a80a25246858f5
--- /dev/null
+++ b/Grafi/PercorsoDijkstra/obj/Debug/net5.0/.NETCoreApp,Version=v5.0.AssemblyAttributes.cs
@@ -0,0 +1,4 @@
+// <autogenerated />
+using System;
+using System.Reflection;
+[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v5.0", FrameworkDisplayName = "")]
diff --git a/Grafi/PercorsoDijkstra/obj/Debug/net5.0/PercorsoDijkstra.assets.cache b/Grafi/PercorsoDijkstra/obj/Debug/net5.0/PercorsoDijkstra.assets.cache
new file mode 100644
index 0000000000000000000000000000000000000000..35d2fae5aa07276e7770b285da98fff7eeb226f6
Binary files /dev/null and b/Grafi/PercorsoDijkstra/obj/Debug/net5.0/PercorsoDijkstra.assets.cache differ
diff --git a/Grafi/PercorsoDijkstra/obj/Debug/net5.0/PercorsoDijkstra.csproj.FileListAbsolute.txt b/Grafi/PercorsoDijkstra/obj/Debug/net5.0/PercorsoDijkstra.csproj.FileListAbsolute.txt
new file mode 100644
index 0000000000000000000000000000000000000000..5a542c84f0ab7d700a1285b4effdfb805a2cefa2
--- /dev/null
+++ b/Grafi/PercorsoDijkstra/obj/Debug/net5.0/PercorsoDijkstra.csproj.FileListAbsolute.txt
@@ -0,0 +1,19 @@
+C:\Users\Fuligni\source\repos\Grafi\PercorsoDijkstra\bin\Debug\net5.0\PercorsoDijkstra.exe
+C:\Users\Fuligni\source\repos\Grafi\PercorsoDijkstra\bin\Debug\net5.0\PercorsoDijkstra.deps.json
+C:\Users\Fuligni\source\repos\Grafi\PercorsoDijkstra\bin\Debug\net5.0\PercorsoDijkstra.runtimeconfig.json
+C:\Users\Fuligni\source\repos\Grafi\PercorsoDijkstra\bin\Debug\net5.0\PercorsoDijkstra.runtimeconfig.dev.json
+C:\Users\Fuligni\source\repos\Grafi\PercorsoDijkstra\bin\Debug\net5.0\PercorsoDijkstra.dll
+C:\Users\Fuligni\source\repos\Grafi\PercorsoDijkstra\bin\Debug\net5.0\ref\PercorsoDijkstra.dll
+C:\Users\Fuligni\source\repos\Grafi\PercorsoDijkstra\bin\Debug\net5.0\PercorsoDijkstra.pdb
+C:\Users\Fuligni\source\repos\Grafi\PercorsoDijkstra\bin\Debug\net5.0\LibreriaGrafi.dll
+C:\Users\Fuligni\source\repos\Grafi\PercorsoDijkstra\bin\Debug\net5.0\LibreriaGrafi.pdb
+C:\Users\Fuligni\source\repos\Grafi\PercorsoDijkstra\obj\Debug\net5.0\PercorsoDijkstra.csproj.AssemblyReference.cache
+C:\Users\Fuligni\source\repos\Grafi\PercorsoDijkstra\obj\Debug\net5.0\PercorsoDijkstra.GeneratedMSBuildEditorConfig.editorconfig
+C:\Users\Fuligni\source\repos\Grafi\PercorsoDijkstra\obj\Debug\net5.0\PercorsoDijkstra.AssemblyInfoInputs.cache
+C:\Users\Fuligni\source\repos\Grafi\PercorsoDijkstra\obj\Debug\net5.0\PercorsoDijkstra.AssemblyInfo.cs
+C:\Users\Fuligni\source\repos\Grafi\PercorsoDijkstra\obj\Debug\net5.0\PercorsoDijkstra.csproj.CoreCompileInputs.cache
+C:\Users\Fuligni\source\repos\Grafi\PercorsoDijkstra\obj\Debug\net5.0\PercorsoDijkstra.csproj.CopyComplete
+C:\Users\Fuligni\source\repos\Grafi\PercorsoDijkstra\obj\Debug\net5.0\PercorsoDijkstra.dll
+C:\Users\Fuligni\source\repos\Grafi\PercorsoDijkstra\obj\Debug\net5.0\ref\PercorsoDijkstra.dll
+C:\Users\Fuligni\source\repos\Grafi\PercorsoDijkstra\obj\Debug\net5.0\PercorsoDijkstra.pdb
+C:\Users\Fuligni\source\repos\Grafi\PercorsoDijkstra\obj\Debug\net5.0\PercorsoDijkstra.genruntimeconfig.cache
diff --git a/Grafi/PercorsoDijkstra/obj/Debug/net5.0/apphost.exe b/Grafi/PercorsoDijkstra/obj/Debug/net5.0/apphost.exe
new file mode 100644
index 0000000000000000000000000000000000000000..e444b0012b825ad7d33872e0aaa5632e0c86b7bf
Binary files /dev/null and b/Grafi/PercorsoDijkstra/obj/Debug/net5.0/apphost.exe differ
diff --git a/Grafi/PercorsoDijkstra/obj/PercorsoDijkstra.csproj.nuget.dgspec.json b/Grafi/PercorsoDijkstra/obj/PercorsoDijkstra.csproj.nuget.dgspec.json
new file mode 100644
index 0000000000000000000000000000000000000000..22d9f3931c30d09fd60f5ad2d58a455bc7a1c297
--- /dev/null
+++ b/Grafi/PercorsoDijkstra/obj/PercorsoDijkstra.csproj.nuget.dgspec.json
@@ -0,0 +1,120 @@
+{
+  "format": 1,
+  "restore": {
+    "C:\\Users\\Fuligni\\OneDrive\\Desktop\\4A\\SR\\algoritmi-di-routing\\Grafi\\PercorsoDijkstra\\PercorsoDijkstra.csproj": {}
+  },
+  "projects": {
+    "C:\\Users\\Fuligni\\OneDrive\\Desktop\\4A\\SR\\algoritmi-di-routing\\Grafi\\LibreriaGrafi\\LibreriaGrafi.csproj": {
+      "version": "1.0.0",
+      "restore": {
+        "projectUniqueName": "C:\\Users\\Fuligni\\OneDrive\\Desktop\\4A\\SR\\algoritmi-di-routing\\Grafi\\LibreriaGrafi\\LibreriaGrafi.csproj",
+        "projectName": "LibreriaGrafi",
+        "projectPath": "C:\\Users\\Fuligni\\OneDrive\\Desktop\\4A\\SR\\algoritmi-di-routing\\Grafi\\LibreriaGrafi\\LibreriaGrafi.csproj",
+        "packagesPath": "C:\\Users\\Fuligni\\.nuget\\packages\\",
+        "outputPath": "C:\\Users\\Fuligni\\OneDrive\\Desktop\\4A\\SR\\algoritmi-di-routing\\Grafi\\LibreriaGrafi\\obj\\",
+        "projectStyle": "PackageReference",
+        "configFilePaths": [
+          "C:\\Users\\Fuligni\\AppData\\Roaming\\NuGet\\NuGet.Config",
+          "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
+        ],
+        "originalTargetFrameworks": [
+          "net5.0"
+        ],
+        "sources": {
+          "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
+          "https://api.nuget.org/v3/index.json": {}
+        },
+        "frameworks": {
+          "net5.0": {
+            "targetAlias": "net5.0",
+            "projectReferences": {}
+          }
+        },
+        "warningProperties": {
+          "warnAsError": [
+            "NU1605"
+          ]
+        }
+      },
+      "frameworks": {
+        "net5.0": {
+          "targetAlias": "net5.0",
+          "imports": [
+            "net461",
+            "net462",
+            "net47",
+            "net471",
+            "net472",
+            "net48"
+          ],
+          "assetTargetFallback": true,
+          "warn": true,
+          "frameworkReferences": {
+            "Microsoft.NETCore.App": {
+              "privateAssets": "all"
+            }
+          },
+          "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\6.0.101\\RuntimeIdentifierGraph.json"
+        }
+      }
+    },
+    "C:\\Users\\Fuligni\\OneDrive\\Desktop\\4A\\SR\\algoritmi-di-routing\\Grafi\\PercorsoDijkstra\\PercorsoDijkstra.csproj": {
+      "version": "1.0.0",
+      "restore": {
+        "projectUniqueName": "C:\\Users\\Fuligni\\OneDrive\\Desktop\\4A\\SR\\algoritmi-di-routing\\Grafi\\PercorsoDijkstra\\PercorsoDijkstra.csproj",
+        "projectName": "PercorsoDijkstra",
+        "projectPath": "C:\\Users\\Fuligni\\OneDrive\\Desktop\\4A\\SR\\algoritmi-di-routing\\Grafi\\PercorsoDijkstra\\PercorsoDijkstra.csproj",
+        "packagesPath": "C:\\Users\\Fuligni\\.nuget\\packages\\",
+        "outputPath": "C:\\Users\\Fuligni\\OneDrive\\Desktop\\4A\\SR\\algoritmi-di-routing\\Grafi\\PercorsoDijkstra\\obj\\",
+        "projectStyle": "PackageReference",
+        "configFilePaths": [
+          "C:\\Users\\Fuligni\\AppData\\Roaming\\NuGet\\NuGet.Config",
+          "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
+        ],
+        "originalTargetFrameworks": [
+          "net5.0"
+        ],
+        "sources": {
+          "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
+          "https://api.nuget.org/v3/index.json": {}
+        },
+        "frameworks": {
+          "net5.0": {
+            "targetAlias": "net5.0",
+            "projectReferences": {
+              "C:\\Users\\Fuligni\\OneDrive\\Desktop\\4A\\SR\\algoritmi-di-routing\\Grafi\\LibreriaGrafi\\LibreriaGrafi.csproj": {
+                "projectPath": "C:\\Users\\Fuligni\\OneDrive\\Desktop\\4A\\SR\\algoritmi-di-routing\\Grafi\\LibreriaGrafi\\LibreriaGrafi.csproj"
+              }
+            }
+          }
+        },
+        "warningProperties": {
+          "warnAsError": [
+            "NU1605"
+          ]
+        }
+      },
+      "frameworks": {
+        "net5.0": {
+          "targetAlias": "net5.0",
+          "imports": [
+            "net461",
+            "net462",
+            "net47",
+            "net471",
+            "net472",
+            "net48"
+          ],
+          "assetTargetFallback": true,
+          "warn": true,
+          "frameworkReferences": {
+            "Microsoft.NETCore.App": {
+              "privateAssets": "all"
+            }
+          },
+          "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\6.0.101\\RuntimeIdentifierGraph.json"
+        }
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/Grafi/PercorsoDijkstra/obj/PercorsoDijkstra.csproj.nuget.g.props b/Grafi/PercorsoDijkstra/obj/PercorsoDijkstra.csproj.nuget.g.props
new file mode 100644
index 0000000000000000000000000000000000000000..a67070b3fe0b60792a9778b6dea07c62ce2ee5d9
--- /dev/null
+++ b/Grafi/PercorsoDijkstra/obj/PercorsoDijkstra.csproj.nuget.g.props
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
+    <RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
+    <RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
+    <ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
+    <NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
+    <NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\Fuligni\.nuget\packages\</NuGetPackageFolders>
+    <NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
+    <NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">5.11.1</NuGetToolVersion>
+  </PropertyGroup>
+  <ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
+    <SourceRoot Include="C:\Users\Fuligni\.nuget\packages\" />
+  </ItemGroup>
+  <PropertyGroup>
+    <MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
+  </PropertyGroup>
+</Project>
\ No newline at end of file
diff --git a/Grafi/PercorsoDijkstra/obj/PercorsoDijkstra.csproj.nuget.g.targets b/Grafi/PercorsoDijkstra/obj/PercorsoDijkstra.csproj.nuget.g.targets
new file mode 100644
index 0000000000000000000000000000000000000000..53cfaa19b16f3769b2bfc33db3b5c0053c16fdba
--- /dev/null
+++ b/Grafi/PercorsoDijkstra/obj/PercorsoDijkstra.csproj.nuget.g.targets
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
+  </PropertyGroup>
+</Project>
\ No newline at end of file
diff --git a/Grafi/PercorsoDijkstra/obj/project.assets.json b/Grafi/PercorsoDijkstra/obj/project.assets.json
new file mode 100644
index 0000000000000000000000000000000000000000..d7e71b4612848d3a2e70e24d3d3c69932ec64c26
--- /dev/null
+++ b/Grafi/PercorsoDijkstra/obj/project.assets.json
@@ -0,0 +1,90 @@
+{
+  "version": 3,
+  "targets": {
+    "net5.0": {
+      "LibreriaGrafi/1.0.0": {
+        "type": "project",
+        "framework": ".NETCoreApp,Version=v5.0",
+        "compile": {
+          "bin/placeholder/LibreriaGrafi.dll": {}
+        },
+        "runtime": {
+          "bin/placeholder/LibreriaGrafi.dll": {}
+        }
+      }
+    }
+  },
+  "libraries": {
+    "LibreriaGrafi/1.0.0": {
+      "type": "project",
+      "path": "../LibreriaGrafi/LibreriaGrafi.csproj",
+      "msbuildProject": "../LibreriaGrafi/LibreriaGrafi.csproj"
+    }
+  },
+  "projectFileDependencyGroups": {
+    "net5.0": [
+      "LibreriaGrafi >= 1.0.0"
+    ]
+  },
+  "packageFolders": {
+    "C:\\Users\\Fuligni\\.nuget\\packages\\": {}
+  },
+  "project": {
+    "version": "1.0.0",
+    "restore": {
+      "projectUniqueName": "C:\\Users\\Fuligni\\OneDrive\\Desktop\\4A\\SR\\algoritmi-di-routing\\Grafi\\PercorsoDijkstra\\PercorsoDijkstra.csproj",
+      "projectName": "PercorsoDijkstra",
+      "projectPath": "C:\\Users\\Fuligni\\OneDrive\\Desktop\\4A\\SR\\algoritmi-di-routing\\Grafi\\PercorsoDijkstra\\PercorsoDijkstra.csproj",
+      "packagesPath": "C:\\Users\\Fuligni\\.nuget\\packages\\",
+      "outputPath": "C:\\Users\\Fuligni\\OneDrive\\Desktop\\4A\\SR\\algoritmi-di-routing\\Grafi\\PercorsoDijkstra\\obj\\",
+      "projectStyle": "PackageReference",
+      "configFilePaths": [
+        "C:\\Users\\Fuligni\\AppData\\Roaming\\NuGet\\NuGet.Config",
+        "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
+      ],
+      "originalTargetFrameworks": [
+        "net5.0"
+      ],
+      "sources": {
+        "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
+        "https://api.nuget.org/v3/index.json": {}
+      },
+      "frameworks": {
+        "net5.0": {
+          "targetAlias": "net5.0",
+          "projectReferences": {
+            "C:\\Users\\Fuligni\\OneDrive\\Desktop\\4A\\SR\\algoritmi-di-routing\\Grafi\\LibreriaGrafi\\LibreriaGrafi.csproj": {
+              "projectPath": "C:\\Users\\Fuligni\\OneDrive\\Desktop\\4A\\SR\\algoritmi-di-routing\\Grafi\\LibreriaGrafi\\LibreriaGrafi.csproj"
+            }
+          }
+        }
+      },
+      "warningProperties": {
+        "warnAsError": [
+          "NU1605"
+        ]
+      }
+    },
+    "frameworks": {
+      "net5.0": {
+        "targetAlias": "net5.0",
+        "imports": [
+          "net461",
+          "net462",
+          "net47",
+          "net471",
+          "net472",
+          "net48"
+        ],
+        "assetTargetFallback": true,
+        "warn": true,
+        "frameworkReferences": {
+          "Microsoft.NETCore.App": {
+            "privateAssets": "all"
+          }
+        },
+        "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\6.0.101\\RuntimeIdentifierGraph.json"
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/README.md b/README.md
index 6b8fdd60c437c4e44b26737e6419e05274b842f7..3157b9e4750c63c4cbb22192c721e80b896942a5 100644
--- a/README.md
+++ b/README.md
@@ -4,4 +4,5 @@
 
 Soluzioni di alcuni degli esercizi proposti durante le lezioni di "Sistemi e reti".
 
-* [Regole di routing](Regole%20routing)
\ No newline at end of file
+* [Regole di routing](Regole%20routing)
+* [Ricerca del percorso minimo](Grafi)
\ No newline at end of file