// Finds the next node to hop to in the route to vertDestination and returns it's handler // if all neighbour nodes are overloaded, than return the source node private List<Vertex> findRouteD( int hndlSource, int hndlDestination ) { int numNodes = this.xDim * this.yDim; PriorityQueue<int, int> minRouteQ = new PriorityQueue<int, int>( numNodes ); List<Vertex> pathList = new List<Vertex>( numNodes - 1 ); // marking all vertices with infinite distance foreach ( Vertex vrt in this.vertexList.TheList ) { minRouteQ.AddToBottom( int.MaxValue, vrt.Handler ); } // assigning the source vertex 0 distance value minRouteQ.SetPriority( hndlSource, 0 ); int currentHandler = 0; int minDistance; // going through all vertices while ( minRouteQ.Count() != 0 ) { // checking what's on top of the priority queue minDistance = minRouteQ.PeekTop().Priority; currentHandler = minRouteQ.PeekTop().Data; // removing the current element from the queue minRouteQ.Dequeue(); // all remaining vertices are inaccesible from source if ( minDistance == int.MaxValue ) { break; } List<int> currentNeightBours = this.incidencyMatrix.GetConnectedVertices( currentHandler ); int distFromCurrent; foreach ( int vHandler in currentNeightBours ) { distFromCurrent = this.incidencyMatrix.GetDistance( currentHandler, vHandler ) + minDistance; if ( minRouteQ.GetPriority(vHandler) > distFromCurrent ) { minRouteQ.SetPriority( vHandler, distFromCurrent ); pathList.Add( this.vertexList.Find(vHandler) ); } } } //minRouteQ return pathList; }