2010-10-23 15 views
-1

hey, je dois tourner un tableau 2D de telle manière: 4X4 ->tableau rotatif différemment

Input  Output 
1 2 3 4 5 1 2 3 
5 6 7 8 1 2 6 4 
1 2 3 4 5 3 7 8 
5 6 7 8 6 7 8 4 

ou pour 5X5 impair ->

Input   Output 
1 2 3 4 5 6 1 2 3 4 
6 7 8 9 10 1 2 7 8 5 
1 2 3 4 5 6 7 3 9 10 
6 7 8 9 10 1 8 9 4 5 
1 2 3 4 5 2 3 4 5 10 

quelqu'un peut me aider ? comme vous pouvez le voir il y a deux anneaux différents et sont tournés.

plz aide

Im d'idées et de la chance.

+1

Quelles idées avez-vous venir avec ce que vous avez décidé ne fonctionnera pas? Quelles sont les contraintes sur le problème? Utilisez-vous Java ou C++? –

+0

J'utilise Java. la langue n'est pas une barrière. – tanush

+0

Je ne suis pas en mesure de voir comment cela peut être mis en œuvre – tanush

Répondre

2

Vous pouvez diviser le tableau n x n comme ceci:

+-----------+ 
|\   /| 
| \ 1 /| 
| \ /| 
| \ / | 
| \/ | 
| 4 + 2 | 
| /\ | 
| / \ | 
|/ \ | 
|/ 3 \ | 
|/   \| 
+-----------+ 

Puis tous les pixels dans la région 1 déplacement vers la droite d'un pixel, tous les pixels dans la région 2 se déplacent vers le bas un pixel, etc.

Les régions peuvent être défini mathématiquement. Supposons que le coin inférieur gauche est (0,0), alors les régions de division de ligne 1 & 4 de 2 & 3 est x = y, et les régions de division de ligne 1 & 2 de 3 & 4 est x = n - y. Alors:

Un pixel est dans la région 1 si x < y et x > n - y. (À gauche du x=y, droit d'x=n-y)

Un pixel est dans la région 2 si x > y et x > n - y. (Droit de x=y, droit de x=n-y)

De même pour les régions 3 & 4.

Vous devez obtenir les pixels de bord droit (certaines de ces comparaisons ont besoin d'un signe égal) et votre code dépendra de la impair-ou-even-ness de la taille du tableau. Mais vous devriez pouvoir partir de là.

+0

merci ... cela ressemble à ça va marcher .. – tanush

+0

pouvez-vous me guider comment puis-je mettre en œuvre votre concept sous forme de tableau? Est-ce que c'est vrai? – tanush

+0

// Un pixel est dans la région 1 si x < y and x > n - y. (à gauche de x = y, à droite de x = n-y) // Un pixel est dans la région 2 si x> y et x> n - y. (à droite de x = y, à droite de x = n-y) // Un pixel est dans la région 3 si x> y et x tanush

0

Que diriez-vous d'aller comme ceci:

FIND OUTER EDGES (Hint: 0,0 to max_x,0; max_x,0 to max_x,max_y; max_x,max_y to 0,max_y; 0,max_y to 0,0) 
Create a new array (call it buffer). (buffer[x][y]) 
buffer[1][0]=arr[0][0]; 
buffer[1][0]=arr[0][0]; 
buffer[1][0]=arr[0][0]; 
... 
buffer[max_x][0]=arr[max_x - 1][0]; 

Faire suivant un intérieur "bord extérieur", commencez à 1,1 à max_x-1, max_y-1, et répéter.

+0

pouvez-vous m'expliquer un peu plus .. – tanush

1
int [][] size = new int[sx][sx]; 
int [][] rot = new int[sx][sx]; 
int x=0; 
for(int i=0;i<sx;i++) 
{ 
    for(int j=0;j<sx;j++) 
    { 
     size[i][j]=x++; 
    } 
} 

for(int i=0;i<sx;i++) 
{ 
    for(int j=0;j<sx;j++) 
    { 
     System.out.print(size[i][j]+"\t"); 
    } 
    System.out.println(); 

}

int n = sx-1; for (int i = 0; i < = n; i ++) { for (int j = 0; j < = n; j ++) {

if(i<j && i>=n-j) 
     rot[i+1][j]=size[i][j]; 

    else if(i>=j && i > n-j) 
     rot[i][j-1]=size[i][j]; 

    else if(i>j && i <= n-j) 

     rot[i-1][j]=size[i][j]; 

    else if(i<=j && i < n-j) 
     rot[i][j+1]=size[i][j]; 

    } 

}