对角矩阵的压缩存储

对角矩阵:非零元集中在主对角线为中心的带状区域。

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]);
}
}

posted @ 2020-10-22 21:37  Reckles  阅读(390)  评论(0)    收藏  举报