2010-10-23 68 views
-1

哎, 我需要旋轉以這樣一種方式的二維數組: 4X4 - >旋轉陣列不同

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 

或奇數5X5 - >

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 

有人可以幫助我? ,你可以看到有兩個不同的環,並開始旋轉。

plz help

進出口的想法和運氣。

+1

你拿出那是什麼想法,你決定將無法工作?這個問題有什麼限制?你在使用Java還是C++? – 2010-10-23 05:10:14

+0

我正在使用Java。語言不是障礙。 – tanush 2010-10-23 05:13:06

+0

林無法看出這可以如何實施 – tanush 2010-10-23 05:13:30

回答

2

可以劃分n x n陣列是這樣的:

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

然後,在區域中的所有像素1個向右移動一個像素,所有像素在區域2向下​​移動一個像素,等等

區域可以數學定義。假設左下角是(0,0),則從2 & 3的行劃分區域是x = y,並且來自3 & 4的行劃分區域是x = n - y。然後:

像素位於區域1中,如果x < yx > n - y。 (x=y的左邊,右邊的x=n-y

如果是x > yx > n - y,則像素位於區域2中。 (中x=y權,x=n-y右)

同樣,對於區域3 & 4.

你需要得到邊緣像素權(其中一些比較需要一個等號),你的代碼將取決於數組大小的奇數或偶數。但你應該能夠從那裏去。

+0

謝謝...這看起來像它的工作.. – tanush 2010-10-23 05:32:39

+0

可以指導我如何實現你的概念形式的數組?這些是正確的嗎? – tanush 2010-10-23 07:45:13

+0

//像素在區域1中,如果x < y and x > n-y。 (x = y的左邊,x = n-y的右邊) //如果x> y且x> n-y,則像素位於區域2中。 (右邊x = y,右邊x = n-y) //如果x> y且x tanush 2010-10-23 07:46:00

0

怎麼會是這樣的:

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

使下一個內部 「外緣」,開始在1.1至MAX_X-1,MAX_Y-1,並重復。

+0

可以解釋我多一點.. – tanush 2010-10-23 06:09:52

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;我< = N;我++) { 爲(INT J = 0;Ĵ< = 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]; 

    } 

}