Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
 private void Dijkstra(HeapTree <Vertex <T> > PriorityQueue, Dictionary <Vertex <T>, (int distance, Vertex <T> parent, bool wasVisited)> VertexMap, Vertex <T> endingVertex)