Жадный алгоритм - из идеи - PullRequest
       11

Жадный алгоритм - из идеи

0 голосов
/ 14 декабря 2018

Я делаю личный проект "Упаковка ленты", и я застрял.

У меня есть N блоки произвольного размера.Мне нужно поместить все N блоков внутри ленты, чтобы иметь как можно меньшую высоту.

Это визуальный результат, который я сейчас получаю (без части else) .

Все работает для первой строки на ленте, проблема в том, что нужно печатать другие блоки поверх блоков, уже находящихся на ленте.Я попробовал несколько вещей, но все еще ничего (я поставлю последнюю «версию» ниже).

public void algoGlouton(Graphics g) {

    ArrayList<Bloc> listBlocRemaining = (ArrayList<Bloc>) blocksList.clone(); 

    int offsetX = 13;
    int offsetY = 600;
    int widthAvailable= 0;
    int smallestHeight= 300;

    for (Bloc b : blocksList.clone) {
        if(widthRemaining + b.getWidth () < ribbon.getWidth ()) {
            widthAvailable += b.getWidth();

            g.setColor(b.getColor());
            g.fillRect(offsetX, offsetY - b.getHeight(), b.getWidth(), b.getHeight());
            listBlocksIntoRibbon.add(b);

            b.setX(offsetX);
            b.setY(offsetY - b.getHauteur());
            offsetX += b.getLargeur();

        } else { //Below is the mess
            // We search the smallest height
            for (Bloc b1 : listBlocksIntoRibbon) {
                if (b1.getHauteur() < smallestHeight) {
                    //when we have the smallest, we go through the blocks remaining
                    for (Bloc b2 : listBlocRemaining) {
                        // PlaceRemaining is an int into the block class and its equal to his width
                        // we see if the block can fit above the smallest height
                        if (b1.getPlaceRemaining() > b2.getWidth()){
                            b2.setX(b1.getX());
                            b2.setY(b1.getHeight() - b2.getHeight());

                            g.setColor(b.getColor());
                            g.fillRect(b1.getX(), b1.getHeight() - b2.getHeight(), b2.getWidth(), b2.getHeight());              
                        }
                    }
                }
            }
        }
    }

Я действительно потерян сейчас, я сделал все возможное, чтобы решить эту проблему, но мне нужна помощьидти дальше.

...