Количество перестановок внутри области? - PullRequest
0 голосов
/ 04 мая 2018

У меня есть следующий случай:

  • GridPane разделена на ячейки, т.е. 6 х 6 = 36 ячеек
  • Конкретное количество Элементов, которые должны вписаться в эту область, например 6
  • Каждый элемент имеет площадь, например {3, 6, 4, 5, 6, 12}, так что общая площадь снова равна общей (36)

И вот мой вопрос: как рассчитать , сколько возможных вариантов Мне нужно:

  1. Рассчитать диапазон строк / столбцов (высота / ширина) элементов: для области 6, например, могут быть разные варианты: 6x1, 1x6, 3x2 и 2x3. Необходимое условие состоит в том, что элементы должны быть квадратом или прямоугольником, поэтому не U или T-образная форма, занимающая сетку в клетках . Вот где я борюсь! так я должен делать дела, как если бы дела? Я думаю, что есть более эффективный способ сделать это! И какие будут условия?

  2. Разместите эти элементы внутри области

Я программирую на java и javafx.

Я пробовал следующий подход для расчета span / height / width:

    int NumberRow = 6; 
    int NumberColum = 6;
    int columspan;
    int rowspan;
    int area = 6;
    if (area / NumberRow == 1) {
       columspan = 1;
       rowspan = area;}

    if  (area/NumberColum== 1) {
      columspan = area;
      rowspan = 1;
    }
    // if area modulo NumberColum or NumberRow == 0 it's an multiple..
    if  (area % NumberColum == 0 ) {
      ???? --> what would make sense here ? 

    }


    VBox v = new VBox();
    v.getChildren().addAll(h1, t, image);
    grid.add(v, colum, row, columspan, rowspan);

1 Ответ

0 голосов
/ 04 мая 2018

Массив элементов может быть отсортирован с уменьшением размеров.

Поскольку необходимо заполнить всю область, ее можно заполнить сверху вниз, слева направо.

Для каждого элемента области возможные формы должны быть повторены; для 6: (1, 6), (6, 1), (2, 3), (3, 2): нахождение пар факторов.

рекурсия с бэк-трекингом; рекурсия выглядит так:

if (free space == 0)
    print success with placements
    ++solution count
    return;
for every candidate:
    if (candidate fits here)
        place candidate here
            recurse (candidates without candidate)
        remove candidate here

Я не буду портить красивую загадку, которая стоит перед вами.

...