对角矩阵的压缩存储
对角矩阵:非零元集中在主对角线为中心的带状区域。
例
5 6 0 0
6 4 1 0
0 1 2 7
0 0 7 8
以下为 带宽为1 的对角矩阵压缩:
将对角矩阵存储在二维数组a [ i ] [ j ]中,再将其映射到一维数组b [ m ]中。
a [ i ] [ j ]与b[ m ] (下标都从1开始)有对应关系 m = 2 * (i-1) + j
include<stdio.h>
define max 100
int main(){
int n;
printf("输入矩阵行列数:");
scanf("%d",&n);
printf("输入矩阵:\n");
int a[n][n];
int i, j;
for(i = 1; i <= n; i++){
for(j = 1; j <= n; j++){
scanf("%d",&a[i][j]);
}
}
int num;
int b[max];
for(i = 1; i <= n; i++){
for(j = i-1; j <= i+1; j++){
b[2(i-1)+j] = a[i][j];
num = 2(i-1)+j;
}
}
for(i = 1; i < num; i++){
printf("%d ",b[i]);
}
}


浙公网安备 33010602011771号