Специальная техника для решения проблемы упаковки - PullRequest
0 голосов
/ 13 декабря 2018

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

Блоки инициализируются так же хорошо, как и лента.Я читаю технику, чтобы решить эту проблему, я собираюсь сделать схему, чтобы она была более понятной:

enter image description here

Итак, что я пытаюсьчтобы сделать это, что следующий блок должен быть нарисован в месте, где я поставил красную точку.Он будет все время проверять нижнюю левую точку: если он может вписаться, тогда все в порядке, если он не может, он попробует другую красную точку.

У меня есть ArrayList, который содержитблок, блоки ранжируются от самого высокого до самого маленького.

Извините, если я не очень хорошо объясняю, английский не мой основной язык.

Вот мои блоки и код ленты:

public Block() {
    this.x = 0;
    this.y = 0;
    this.height = 20 + rand.nextInt(80 - 10);
    this.weight = 10 + rand.nextInt(50 - 10);
    //this.placeDispo = this.largeur;
    //this.hauteur = 30;
    //this.largeur = 30;
    id = genID.getAndIncrement();
    this.color = new Color(0 + rand.nextInt(255), 
                    (0 + rand.nextInt(255)),
                    (0 + rand.nextInt(255)));
}

public Ribbon() {
    randomGenerator = new Random();
    this.weight = 100 + randomGenerator.nextInt(580 - 100);
    this.height = 100; //ça doit être a l'infini
    listBlockInRibbon = new ArrayList<Bloc>(); 
    listBlocksRemaining = new ArrayList<Bloc>();
}

Сердечно

...