/// <summary>
        /// Performs the dijkstra shortest path search on the provided geodesic graph. 
        /// </summary>
        /// <returns>Returns a dictionary with the minimum distances from the starting node to the given nodes</returns>
        public static Dictionary<int, float> Perform(int start, Dictionary<int, Dictionary<int, float>> geodesicGraph)
        {
            Dictionary<int, float> distances = GetStartingTraversalCost(start,geodesicGraph);

            BasicHeap q = new BasicHeap();

            foreach (var distance in distances)
            {
                q.Push(distance.Key,distance.Value);
            }

            while (q.Count != 0)
            {
                int v = q.Pop();

                Dictionary<int, float> neighbours = geodesicGraph[v];

                foreach (var neigbourIndex in neighbours.Keys)
                {
                    float cost = neighbours[neigbourIndex];

                    if (distances.ContainsKey(neigbourIndex))
                    {
                        if (cost < float.MaxValue && distances[v] + cost < distances[neigbourIndex])
                        {
                            distances[neigbourIndex] = distances[v] + cost;

                            q.Push(neigbourIndex, distances[neigbourIndex]);
                        }
                    }
                }
            }

            return distances;
        }
        /// <summary>
        /// Performs the dijkstra shortest path search on the provided geodesic graph.
        /// </summary>
        /// <returns>Returns a dictionary with the minimum distances from the starting node to the given nodes</returns>
        public static Dictionary <int, float> Perform(int start, Dictionary <int, Dictionary <int, float> > geodesicGraph)
        {
            Dictionary <int, float> distances = GetStartingTraversalCost(start, geodesicGraph);

            BasicHeap q = new BasicHeap();

            foreach (var distance in distances)
            {
                q.Push(distance.Key, distance.Value);
            }

            while (q.Count != 0)
            {
                int v = q.Pop();

                Dictionary <int, float> neighbours = geodesicGraph[v];

                foreach (var neigbourIndex in neighbours.Keys)
                {
                    float cost = neighbours[neigbourIndex];

                    if (distances.ContainsKey(neigbourIndex))
                    {
                        if (cost < float.MaxValue && distances[v] + cost < distances[neigbourIndex])
                        {
                            distances[neigbourIndex] = distances[v] + cost;

                            q.Push(neigbourIndex, distances[neigbourIndex]);
                        }
                    }
                }
            }

            return(distances);
        }