对角矩阵的压缩
对角矩阵是指所有的非0元素都集中在以主对角线为中心的袋状区域中,即除了主对角线上和在对角线上、下方若干条对角线上的元素之外,所有其他的元素皆为0。
今天做的是对角矩阵中的特例,三对角矩阵的压缩
三对角矩阵,从第二行开始选中的元素的个数都为3个。

假设矩阵A从a[1,1]开始储存,对于a[i,j]将要存储的位置k(k从0开始): k = 2 + 3 * ( i - 2 ) + j - i + 1 = 2 * i + j - 3;
若已知k,则[i,j]为
i=(k+1)/3+1;
j=k-2*i+3;
include<stdio.h>
int main(){
int n;
scanf("%d", &n);
int a[n][n];
int i, j, s,k;
for(i = 1; i<=n; i++){
for(j = 1; j<=n; j++){
scanf("%d", &a[i][j]);
}
}
s = n * 3 - 2;
int sa[s];
for(k=0;k<s;k++){
i=(k+1)/3+1;
j=k-2*i+3;
sa[k]=a[i][j];
printf("sa[%d] = %d\n",k,sa[k]);
}
return 0;
}
运行结果:


浙公网安备 33010602011771号