Java 区域内的排列数量?
我有以下情况:Java 区域内的排列数量?,java,math,javafx,permutation,gridpane,Java,Math,Javafx,Permutation,Gridpane,我有以下情况: 一个网格窗格,被划分为多个单元格,因此f.e.6 x 6=36个单元格 需要融入该区域的具体构件数量,f.e.6 每个元素都有一个面积f.e.{3,6,4,5,6,12},因此总面积也是总面积(36) 我的问题是:我如何计算有多少种可能的选择我必须: 计算元素的行/列跨度(高度/宽度):对于6的区域,不同的选项可以是6x1、1x6、3x2和2x3。。一个必要条件是元素必须是正方形或矩形,因此f.e.不是占据单元格网格的U形或T形。这就是我挣扎的地方! 那么我应该像if cas
- 一个网格窗格,被划分为多个单元格,因此f.e.6 x 6=36个单元格
- 需要融入该区域的具体构件数量,f.e.6
- 每个元素都有一个面积f.e.{3,6,4,5,6,12},因此总面积也是总面积(36)
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);
元素数组可以按较小的大小排序 由于必须填充整个区域,因此可以从上到下、从左到右填充 对于每个区域元素,必须迭代可能的形式;对于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
我不会破坏你面前的美好谜团。你可以使用
int
行
作为大小为n
iffn%row==0
的区域的行数。在这种情况下,列数为n/行
。我想您最好的选择是深度优先搜索解决方案(尽早整理无效结果)。嗨,Fabian,谢谢!我更新了问题并添加了一些代码-所以是的,我也考虑了模,但我不知道一旦得到满足条件(模==0)的解决方案,如何计算布局的不同选项(例如3 x 2,2x3,6x1…)。只需使用循环遍历行值的所有可能值并检查它们是否有效。顺便说一句:考虑一下,您可能应该确定“下一个空闲”单元的元素,而不是考虑所有元素的所有位置和尺寸。如果您还不知道深度优先搜索,请查看回溯,不要停留在单一解决方案上。