2015-07-31 20 views
5

che sto cercando di fare questo lavoro per gli algoritmi, che mi chiedono di riempire un array bidimensionale di int in questo modo:Riempire una matrice 2D con manhattan modello distanza

4 3 2 3 4 
3 2 1 2 3 
2 1 0 1 2 
3 2 1 2 3 
4 3 2 3 4 

ho provato questo in Java:

int[][] array = new int[5][5]; 
for (int i = 0; i < array.length; i++) { 
    for (int j = 0; j < array[i].length; j++) { 
     array[i][j] = Math.abs(i - j); 
    } 
} 

ma mi dà qualcosa di simile:

0 1 2 3 4 
1 0 1 2 3 
2 1 0 1 3 
3 2 1 0 1 
4 3 2 1 0 

E non è proprio la stessa cosa, ma è il più vicino che Ho trovato. Ho scritto il codice in java ma può essere in qualsiasi altra lingua ... l'importante è la "formula" che penso. Quindi, se puoi aiutarmi a risolvere questo problema, sarà bello, ho provato a cercare il codice online ma non ho trovato nulla ... grazie.

+3

Per prima cosa è necessario calcolare il numero manualmente, prima di poterlo calcolare con un programma per computer. Quindi il numero in ogni cella è Manhattan distanza dal centro. Cerca come calcolare la distanza di Manhattan, quindi calcola a mano per assicurarti di ottenere gli stessi risultati dell'esempio, quindi converti il ​​calcolo in codice. – hyde

risposta

6

Sembra che tu stia cercando la distanza dal centro. Quindi, è necessario prima di calcolare questo punto:

int center = array.length/2; //assuming a quadratic array 

Quindi, calcolando la distanza è abbastanza facile:

//for ... 
array[i][j] = Math.abs(i - center) + Math.abs(j - center); 
-1

Questo sarà anche il lavoro.

int p=N-1; 
for(i=0,l=N-1;i<=l;i++,l--) 
{ 
    for(j=0,k=N-1;j<=k;j++,k--) 
    { 
     arr[i][j]=p; 
     arr[i][k]=p; 
     arr[l][j]=p; 
     arr[l][k]=p; 
     p--; 
    } 
    p=N-i-2; 
} 
Problemi correlati