2010-12-15 20 views
1

Je dois créer un tableau de tableauxtableau java avec des sommets de dodécaèdre

int x[][] = new int[20][3]; 

où les indices de x sont les sommets d'un dodécaèdre (juste marqué 0-19 depuis le dodécaèdre a 20 sommets), et les éléments de x [0-19] sont les sommets voisins. Si ce n'est pas clair prendre cet exemple:

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

Dans ce tableau échantillon y[0][0-2] fait référence aux voisins du sommet 0, qui se trouvent être 1,5 et 4. Conformément à cela, y[1], y[5], et y[6] contiennent 0.

Je ne veux pas simplement écrire dans ce tableau, plutôt que je veux créer une version aléatoire de cela.

+0

Quel est le problème avec l'échantillon dans votre question? –

+0

Vous devriez clarifier, que voulez-vous accomplir? –

+0

@RC et @Keith Randall Je viens de mettre à jour ce que je veux obtenir –

Répondre

5

Si vous voulez numéroter les sommets d'une manière « aléatoire », tout en préservant la structure de sommet dodécaèdre, cela devrait faire l'affaire:

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; 
    } 
+0

pour (int i = 0; i <19; i ++) - <19? devrait-il être <20? – Ralph

+0

@Ralph - oui ... corrigé. –

0

Créez la première, comme vous l'avez fait, puis commencer le mélanger. (appelons-le int [] [] x - parce que vous l'avez nommé x et y)

Sélectionnez deux arêtes différentes au hasard et échangez-les, répétez cette opération plusieurs fois.

Si vous voulez échanger deux arêtes, vous devez permuter les arrays ainsi que les "références" dans les arrays. par exemple: bord de swap 1 et 10: Code 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; 
    } 
    } 
}