예제 #1
0
        public void AddEdge(WeightedDirectedEdge edge)
        {
            if (edge == null)
            {
                throw new ArgumentNullException(nameof(edge));
            }

            if (adjacencyList[edge.From] == null)
            {
                adjacencyList[edge.From] = new List <WeightedDirectedEdge>();
            }

            adjacencyList[edge.From].Add(edge);
            EdgeNumber++;
        }
예제 #2
0
        public void RelaxEdge(WeightedDirectedEdge edge)
        {
            var fromVertex = edge.From();
            var toVertex   = edge.To();

            if (DistTo[toVertex] > DistTo[fromVertex] + edge.Weight())
            {
                DistTo[toVertex] = DistTo[fromVertex] + edge.Weight();
                EdgeTo[toVertex] = edge;

                var changedNode = new Node(toVertex, DistTo[toVertex]);

                minHeap.ChangePriority(toVertex, changedNode);
            }
        }