2017-10-24 10 views
0

二次対角行列について正方行列を転置するプログラムを作成しようとしています。私はそれを通常の(対角線に沿って)普通に転置する方法を知っていますが、私はセカンダリ軸に関してそれを行う方法を理解することができません。二次対角に関する行列の転置(フリップ)

ループで何が間違っていますか?私は 'N/2'まで実行し、 'i'と 'j'の初期化を変えなければならないことを知っていますが、それをしても動作しません。

void transpose(int a[][N]) // Transposes matrix along the secondary diagonal 
{ 
    for (int i = 0; i < N; i++) 
     for (int j = 0; j < i; j++) 
     { 
      int tmp = a[i][j]; 
       a[i][j] = a[N - 1 - j][N - 1 - i]; 
       a[N - 1 - j][N - 1 - i] = tmp; 
     } 

} 

答えて

0

私は多くの時間の後にループを考え出しました。 他の誰かが同じ問題を抱えている場合は、ここにあります。

void swapEl(int mat[][n]) 
{ 
    for (int i = 0; i < (n - 1); i++) 
     for (int j = 0; j < (n - 1) - i; j++) 
     { 
      int tmp = mat[i][j]; 
       mat[i][j] = mat[(n - 1) - j][(n - 1) - i]; 
       mat[(n - 1) - j][(n - 1) - i] = tmp; 
     }  
} 
2

まず、単純な3x3マトリックスを試してください。 (N^2 - N)/ 2要素にのみアクセスする必要があります。

ここにビジュアルがあります。

0 1 2 
0 * */
1 */x 
2/x x 

(9-3)/ 2 = 3要素にアクセスする必要があります。 具体的に(0,0)、(0,1)、および(1,0)、そのN = 3のためのネストされたループが

for(int i = 0; i < 2; i++) 
    for(int j = 0; j < 2-i; j++) 
     //etc.. 

・ホープこのことができますようになるはずです。

+0

私はこれについて考えましたが、これは3x3マトリクスでしか動作しないことを認識し、NxNマトリクス –

関連する問題