public List <T> BellmanFord(T startValue, T endValue) { Vertex <T> startingVertex = Find(startValue); Vertex <T> endingVertex = Find(endValue); List <T> returnList = new List <T>(); if (startingVertex == null || endingVertex == null) { return(returnList); } Dictionary <Vertex <T>, (int distance, Vertex <T> parent, bool wasVisited)> VertexMap = new Dictionary <Vertex <T>, (int distance, Vertex <T> parent, bool wasVisited)>(); foreach (Vertex <T> vertex in vertices) { VertexMap.Add(vertex, (int.MaxValue, null, false)); } ChangeMap(VertexMap, startingVertex, 0); HeapTree <Vertex <T> > PriorityQueue = new HeapTree <Vertex <T> >(Comparer <Vertex <T> > .Create((a, b) => VertexMap[a].distance.CompareTo(VertexMap[b].distance))); PriorityQueue.Add(startingVertex); Dijkstra(PriorityQueue, VertexMap, endingVertex); Vertex <T> currentVertex = endingVertex; while (VertexMap[currentVertex].parent != null) { returnList.Add(currentVertex.Value); currentVertex = VertexMap[currentVertex].parent; } if (returnList.Count != 0) { returnList.Add(startingVertex.Value); } return(returnList); }
public List <T> Dijkstra(T startValue, T endValue) { Vertex <T> startingVertex = Find(startValue); Vertex <T> endingVertex = Find(endValue); List <T> returnList = new List <T>(); if (startingVertex == null || endingVertex == null) { return(returnList); } Dictionary <Vertex <T>, (int distance, Vertex <T> parentVertex, bool wasVisited)> VertexMap = new Dictionary <Vertex <T>, (int, Vertex <T>, bool)>(); foreach (Vertex <T> vertex in Vertices) { VertexMap.Add(vertex, (int.MaxValue, null, false)); } VertexMap[startingVertex] = (0, null, false); var PriorityQueue = new HeapTree <Vertex <T> >(Comparer <Vertex <T> > .Create((a, b) => VertexMap[a].distance.CompareTo(VertexMap[b].distance))); PriorityQueue.Add(startingVertex); Dijkstra(PriorityQueue, VertexMap, endingVertex); Vertex <T> currentVertex = endingVertex; while (VertexMap[currentVertex].Item2 != null) { returnList.Add(currentVertex.Value); currentVertex = VertexMap[currentVertex].Item2; } returnList.Add(startingVertex.Value); return(returnList); }