2017-04-14 21 views
2

配列の要素を、その位置a(そうであればそれほど確かではない)から、行列の中心に対して反対称の位置に変更しようとしています。行列内の非対称要素を交換する

1 2 3 4 5 
6 7 8 9 10 
11 12 13 14 15 
16 17 18 19 20 
21 22 23 24 25 

中心は次のようになります:13

例では番号を交換することであろう中央何の一部は、(中心は1,2又は4細胞であり得るマトリックスに依存して)行われるべき2を24とした。私は、xとyの中心から要素の位置(dx dy)までの変位を計算することで考えていた中心から反対称位置に到達するための変位は-dx -dyとなる。その場合には、中心が単一の位置ではありませんが、それがセットになりますので、行列は、奇数列または行を持っている場合

int mat [][5]={{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20},{21,22,23,24,25}}; 
int aux; 
int i = 0; 
int j = 1;   // i and j are the indeces of the element to be exchanged 
int xcenter=col/2; 
int ycenter=fil/2; // xcenter and xcenter are the indeces of the center 
int dx = j-xcenter; 
int dy = i-ycenter; // dx dy are the displacements 
aux=mat[i][j]; 
mat[i][j]=mat[xcenter-dx][ycenter-dy]; 
mat[xcenter+dx][ycenter+dy]=aux; 

私の問題が来ます。例えば、5 * 4

1 2 3 4 
5 6 7 8 
9 10 11 12 
13 14 15 16 
17 18 19 20 

センターのこの行列は次のようになります。

10 11 

私はセンターを見つける知っているし、その中央の要素からカウント変位にはありません。

+0

あなたは何を達成したいのか、それがプログラミングの問題なのか明らかではありません。ちょうどそれ:正方形対正方形の問題ではありません。奇数対偶数の行/列の数です。 – Olaf

+1

また、「10」と「11」の中間(または「中心」が2点以上の場合平均的な位置)に中心を定義することもできます。 – Peter

+0

中心よりも重要なのは '5 * 4(5行、4列)の行列に2を含むセルが19の位置に移動し、その逆の場合です。また、10と11を含むセルを交換する必要はありませんか?そうでない場合は、5 * 7または5 * 8または5 * 9行列(および4 * 7,4 * 8など)で何が起こるかを記述する必要があります。つまり、より極端な非正方行列の挙動は何ですか。 –

答えて

0

あなたはこのようなあなたの座標計算を簡素化することができます

xcenter-dx = xcenter - (j-xcenter) = 2*xcenter - j = 2*col/2 - j = col - j 

と同様に

xcenter+dx = j 
ycenter-dy = fil - i 
ycenter+dy = i 

をだからあなたが2で奇数の分割の問題を持っていません。

関連する問題