求助,请高人帮忙调试,对三角矩阵的压缩转置算法
把一对三角矩阵用一位数组压缩,在进行转置的算法,下面是我写的程序,调试也没有语句上的错误了,但不能运行,求高人相助,先谢过大家了!!!!
#include<stdio.h>
#include<stdlib.h>
#define max 20
#define zero 0
typedef struct{
int i,j,v;
}node;
typedef struct{
node data[max];
int m;
}TSmatrix;
TSmatrix *Setmatrix(){ //建三对角矩阵
TSmatrix *T;
T=(TSmatrix *)malloc(sizeof(TSmatrix));
printf("请输入矩阵行数或列数:");
scanf("%d",&T->m);
printf("建立三对角矩阵:\n");
printf("输入第一行的两个数:\n");
scanf("%d %d",&T->data[0].v,&T->data[1].v);
T->data[0].i=0;
T->data[0].j=0;
T->data[1].i=0;
T->data[1].j=1;
printf("输入第二行至第%d行的数(每行3个):\n",T->m-1);
int t=2;
for(int p=1;p<T->m-1;p++)
for(int q=p-1;q<p+2;q++)
{
T->data[t].i=p;
T->data[t].j=q;
scanf("%d",&T->data[t].v);
t++;
}
printf("输入最后一行的两个数:\n");
scanf("%d %d",&T->data[T->m-2].v,&T->data[T->m-1].v);
T->data[T->m-2].i=T->m-1;
T->data[T->m-2].j=T->m-2;
T->data[T->m-1].i=T->m-1;
T->data[T->m-1].j=T->m-1;
return T;
}
TSmatrix *Trabsmatrix(TSmatrix *T){ //三对角矩阵转置
int n,temp;
TSmatrix *F;
F=(TSmatrix *)malloc(sizeof(TSmatrix));
F->m=T->m;
for(n=0;n<3*T->m-2;n++){ //将结点信息存入新三元组表中
temp=2*T->data[n].j+T->data[n].i; //计算待存入三元数组下标
F->data[temp].i=T->data[n].j;
F->data[temp].j=T->data[n].i;
F->data[temp].v=T->data[n].v;
}
return F;
}
void TSmatrixout(TSmatrix *T){ //三对角矩阵输出
int a,b,n;
n=0;
for(a=0;a<T->m;a++){
for(b=0;b<T->m;b++){
if(T->data[n].i==a&&T->data[n].j==b){
printf("%d ",T->data[n].v);
n++;
}
else
printf("%d ",zero);
}
printf("\n");
}
}
void main(){
TSmatrix *T;
T=Setmatrix();
printf("三对角矩阵:\n");
TSmatrixout(T);
T=Trabsmatrix(T);
printf("转置后三对角矩阵:\n");
TSmatrixout(T);
}