/// <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); }