コード例 #1
0
        public void DecreaseKey(int vertex, int weight)
        {
            var node  = new AdjListNode(weight, vertex);
            var index = -1;

            for (var i = 0; i < this._size; i++)
            {
                if (this.arr[i].Vertex == vertex)
                {
                    this.arr[i].Weight = weight;
                    index = i;
                }
            }
            var parentOfI = GetParent(index);

            if (parentOfI < 0)
            {
                return;
            }

            while (index >= 0 && this.arr[index].Weight < this.arr[parentOfI].Weight)
            {
                this.arr[index] = this.arr[parentOfI];
                index           = parentOfI;
                parentOfI       = GetParent(parentOfI);
                if (parentOfI < 0)
                {
                    break;
                }
            }
            this.arr[index] = node;
        }
コード例 #2
0
        public void InsertKey(int vertex, int weight)
        {
            var node = new AdjListNode(weight, vertex);

            this.arr[this._size] = node;
            this._size++;
            var i         = this._size - 1;
            var parentOfI = GetParent(i);

            if (parentOfI < 0)
            {
                return;
            }

            while (i >= 0 && this.arr[i].Weight < this.arr[parentOfI].Weight)
            {
                this.arr[i] = this.arr[parentOfI];
                i           = parentOfI;
                parentOfI   = GetParent(parentOfI);
                if (parentOfI < 0)
                {
                    break;
                }
            }
            this.arr[i] = node;
        }
コード例 #3
0
        public void AddEdge(int source, int destination, int weight)
        {
            var node = new AdjListNode(weight, destination);

            _adjList[source].AddLast(node);
        }