行列の行の入換え
| -1 -1 -2 -1 10 |
| -1 -2 -1 10 -1 |
| -2 -1 10 -1 -1 |
| -1 10 -1 -1 -2 |
| 10 -1 -1 -2 -1 |
この行列を次の順序で並び替えたいのですが
1.第1列にある要素の中で絶対値の最大値がある行を探し,その行と第1行を入れ換える.
2.第2列にある要素の中で絶対値の最大値がある行を第2行以下から探し,その行と第2行を入れ換える.
3.これを左上から右下へ順次移動して,行の入れ換えを行う.
#include<stdio.h>
#include<math.h>
#define N 5
#define M 5
int main(){
float a[N][M]={{-1.0,-1.0,-2.0,-1.0,10.0},{-1.0,-2.0,-1.0,10.0,-1.0},{-2.0,-1.0,10.0,-1.0,-1.0},
{-1.0,10.0,-1.0,-1.0,-2.0},{10.0,-1.0,-1.0,-2.0,-1.0}};
float nmax;
int i,j,k=0,s,imax;
for(j=0; j<M; j++){
nmax = a[0][j];
imax = 0;
for(i=1; i<N; i++){
if(fabs(nmax) < fabs(a[i][j])){
nmax = a[i][j];
imax = i;
}
}
for(j=0; j<M; j++){
s=a[k][j];
a[k][j]=a[imax][j];
a[imax][j]=s;
}
k++;
}
for(i=0; i<N; i++){
for(j=0; j<M; j++){
printf("%5.1f ",a[i][j]);
}
printf("\n");
}
return(0);
}
このように作成したのですが、1行目と5行目しかいれかわりません。
なぜでしょうか??
お礼
すいません、そうでした。そうなれば第1項と第2項の係数は同じになりますね。ありがとうございました。