我需要创建一个数组数组
int x[][] = new int[20][3];
其中x的索引是十二面体的顶点(由于十二面体具有20个顶点,因此标记为0-19),并且x [0-19]的元素是邻居顶点。 如果不清楚,请参考以下示例:
int y[][] = {{ 1, 5, 4}, { 0, 7, 2}, { 1, 9, 3}, { 2, 11, 4},
{ 3, 13, 0}, { 0, 14, 6}, { 5, 16, 7}, { 1, 6, 8},
{ 7, 9, 17}, { 2, 8, 10}, { 9, 11, 18}, {10, 3, 12},
{19, 11, 13}, {14, 12, 4}, {13, 5, 15}, {14, 19, 16},
{ 6, 15, 17}, {16, 8, 18}, {10, 17, 19}, {12, 15, 18}};
在此示例数组中,y[0][0-2]
引用顶点0的邻居,恰好是1,5和4.与此一致,y[1]
,y[5]
和{ {1}}包含0.
我不想只写这个数组,而是想创建一个随机版本。
答案 0 :(得分:5)
如果你想在保留十二面体顶点结构的同时以“随机”方式重新编号顶点,那么这应该可以解决问题:
int[] shuffle = // an array containing a permutation of [0..19]
int[][] z = new int[20][];
for (int i = 0; i < 20; i++) {
int[] vy = y[i];
int[] vz = new int[3];
for (int j = 0; j < 3; j++) {
vz[j] = shuffle[vy[j]];
}
z[shuffle[i]] = vz;
}
答案 1 :(得分:0)
像你一样创建初始的,然后开始改变它。 (让我们称之为int [] [] x - 因为你把它命名为x和y)
随机选择两个不同的边并交换它们,重复几次。
如果要交换两条边,则必须交换数组,以及数组中的“引用”。 例如:交换边缘1和10: psydo代码:
int[] temp = x[1];
x[1] = x[10];
x[10] = temp;
for (int i = 0; i < 20; i++) {
for(int k = 0; k < 3; k++) {
if (x[i][k]==1) {
x[i][k]= 10;
} else if(x[i][k]==10) {
x[i][k]= 1;
}
}
}