具有十二面体顶点的java数组

时间:2010-12-15 06:20:26

标签: java arrays

我需要创建一个数组数组

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.

我不想只写这个数组,而是想创建一个随机版本。

2 个答案:

答案 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;
    }
  }
}