Exemplo n.º 1
0
        static void Main(string[] args)
        {
            //Initialise a heap to some size
            int sizeOfHeap = 10;
            BinaryHeap <int> sampleHeap;

            sampleHeap = new BinaryHeap <int>(sizeOfHeap);

            //populate a heap
            for (int i = 0; i < sizeOfHeap; i++)
            {
                sampleHeap.AddItem(i);
            }
            //This line shows how to use comparison, element 5 is less than element 6 and returns -1
            Console.WriteLine(sampleHeap.GetItem(5).CompareTo(sampleHeap.GetItem(6)));

            //Print each  element in the heap
            Console.Write("Useless Linear Heap: ");
            foreach (int i in sampleHeap)
            {
                Console.Write(i + " ");
            }
            Console.WriteLine();
            BinaryHeap <int> sampleHeap2;

            sampleHeap2 = new BinaryHeap <int>(9);
            sampleHeap2.AddItem(1);
            sampleHeap2.AddItem(3);
            sampleHeap2.AddItem(36);
            sampleHeap2.AddItem(2);
            sampleHeap2.AddItem(19);
            sampleHeap2.AddItem(25);
            sampleHeap2.AddItem(100);
            sampleHeap2.AddItem(17);
            sampleHeap2.AddItem(7);

            // sampleHeap2.MinHeapify(0);
            foreach (int i in sampleHeap2)
            {
                Console.WriteLine(i);
            }
            Console.ReadLine();
        }
Exemplo n.º 2
0
        static void Main(string[] args)
        {
            int            n           = 10;
            Random         rd          = new Random();
            Queue <double> goodsWeight = new Queue <double>(); // веса товаров

            goodsWeight.Enqueue(0.6);
            goodsWeight.Enqueue(0.3);
            goodsWeight.Enqueue(0.4);
            goodsWeight.Enqueue(0.7);

            //for (int i = 0; i < n; i++)
            //    goodsWeight.Enqueue(Math.Round(rd.NextDouble(), 3));

            Console.Write("Weights on conveyor: ");

            foreach (var oneWeight in goodsWeight)
            {
                Console.Write(" {0} |", oneWeight);
            }

            BinaryHeap <double> boxes = new BinaryHeap <double>(); // коробки для упаковки

            boxes.Add(goodsWeight.Dequeue());                      // + проверка на отсутствие товара

            while (goodsWeight.Count > 0)
            {
                var oneWeight = goodsWeight.Dequeue();
                var buffer    = new List <double>(); // буфер для хранения извлеченных максимумов кучи

                while (boxes.Count > 0)
                {
                    var oneBox = boxes.Pop();

                    // если вес товара умещается в коробку, то...
                    if (oneBox + oneWeight <= 1)
                    {
                        // добавляем коробку с новым весом, вместо извлеченной
                        boxes.Add(oneBox + oneWeight);
                        break;
                    }
                    // иначе...
                    else
                    {
                        // запоминаем какой вес вытащили
                        buffer.Add(oneBox);
                    }
                }

                // если подходящая коробка не найдена, то...
                if (boxes.Count == 0)
                {
                    // добавляем новую
                    boxes.Add(oneWeight);
                }

                // добавляем все веса, которые запомнили
                foreach (var el in buffer)
                {
                    boxes.Add(el);
                }
            }

            Console.Write("\nPackaging in {0} boxes completed: ", boxes.Count);

            foreach (var box in boxes.Elements())
            {
                Console.Write(" {0} |", box);
            }
        }