我的计划是将每个元素放在GridPane中的JavaFX程序上。但是javafx实际上并不是我的问题,因为我无法在抽象中进一步创建具有以下特征的算法:
这是算法本身的一个示例,因此您不必查看不必要的javaFX元素。
public static void main(String[] args) {
String[] v1 = {null,"1",null,"3"};
String[] v2 = {"0","\"1",null,"3"};
String[] v3= {"4","5","6","","8","9","","11","12","13"};
int row=0, col=0, index=0;
String[] v = concat(v1, v3);
for(String s: v){
if(s != null && !s.isEmpty()){
if(index<3){
if(col<2){
col++;
index++;
}
else{
col=0;
row++;
System.out.println("");
}
//System.out.println("index="+index);
System.out.print(" "+s);
}
}
}
v1,v3的所需输出为:
1 3 6
4 5 8
11 12 13
v2,v3的所需输出为:
0 1 5 12
3 4 6 13
8 9 11
正如您所看到的那样:目标是从左上角开始,并在必要时扩展该方块,同时不放置可能在连接数组中的任何null or empty
项。
我的代码适用于前4个,但我无法真正考虑如何以通用方式扩展它。如何为这样的任务编写通用算法?
编辑以澄清: 使用放置元素的编号,放置模式应如下所示:
1 2 5 10
3 4 6 11
7 8 9
答案 0 :(得分:2)
这是我从我对你的问题的理解中写的一些Python代码。希望你能翻译它。
主要思想如下:如果你完成了一个正方形,那么从上到下填充最右边的部分,然后从左到右填充底部。
from pprint import pprint
t = range(1,92)
n = len(t)
s = int(n**.5+1)
mat = [[None]*s for _ in range(s)]
i, j = 0, 0
k = 0
st = "right"
while k<n:
mat[i][j] = t[k]
k += 1
if i==j and st=="right":
i = 0
j += 1
st = "down"
elif st == "right":
j += 1
elif i+1==j and st=="down":
i += 1
j = 0
st = "right"
else:
i += 1
pprint(mat)